Java 在子jsp中设置父jsp变量
我有一个父jsp a.jsp,其中包括另一个jsp b.jsp。我正在计算b.jsp中需要在父jsp a.jsp中使用的一些值,父jsp a.jsp将把这个计算值传递给另一个jsp,比如c.jsp。我如何评估子jsp中的值,并在该页面完全加载之前将其传递给父jsp?您可以使用会话范围来完成此操作 (b.jsp) (c.jsp) 不过,我建议改为进行一些重大重组。在您的示例中,数据的值取决于页面上元素的顺序。如果您需要重新安排事情(例如,将b.jsp include移到c.jsp include之后),您可能会破坏业务逻辑 web开发的一个好模式是模型-视图-控制器模式。“控制器”确定应显示的页面,“模型”计算所有数据并使其可用,“视图”进行显示和格式化 我建议阅读这篇文章,这有助于理解为什么MVC是一种有价值的方法:Java 在子jsp中设置父jsp变量,java,jsp,atg,Java,Jsp,Atg,我有一个父jsp a.jsp,其中包括另一个jsp b.jsp。我正在计算b.jsp中需要在父jsp a.jsp中使用的一些值,父jsp a.jsp将把这个计算值传递给另一个jsp,比如c.jsp。我如何评估子jsp中的值,并在该页面完全加载之前将其传递给父jsp?您可以使用会话范围来完成此操作 (b.jsp) (c.jsp) 不过,我建议改为进行一些重大重组。在您的示例中,数据的值取决于页面上元素的顺序。如果您需要重新安排事情(例如,将b.jsp include移到c.jsp include之
编辑:正如其他用户所提到的,请求范围将比会话范围更清晰。但是,我仍然建议在写入任何显示内容之前先确定值 如果您需要在include和included jsp(以及viceversa)之间传递属性,您应该使用页面上下文,这是更简短的上下文(从生命周期的角度来看)您可以在b.jsp中的请求中设置变量,并在parent.jsp中使用它们。但是您只能在标记之后的父jsp中使用它们。请记住,这些都是在服务器端进行评估的,因此当您说“在该页面完全加载之前”,可以保证服务器在浏览器加载之前已经对其进行了评估。如果您的意思是要将服务器上的计算延迟到下面的代码被计算出来,那么这是不可能的。至少不是这样 b、 jsp
parent.jsp
值为${requestScope.myVar}。
如何将“子”jar包含在父容器中?静态导入还是动态导入
如果你有
<%@ include file="myFile.jsp" %>
换成
<jsp:include file="myFile.jsp" />
然后在父进程中,在请求中设置一个属性(不在会话中,这将是“更脏”):
最后,在“子”jsp中:
如果真的使用会话作用域来存储可能是暂时的数据,例如产品/sku信息,那将是一个非常糟糕的主意。ATG中的会话可以在内存中挂起15分钟或更长时间。请求范围就是要走的路!这个答案似乎很接近,但并不完全符合问题的要求。我可以这样做。。。在父JSP-request.setAttribute(“myAttrName”,initialvalue)中;在子JSP-request.setAttribute(“myAttrName”,newvalue)中;然后在父JSP中,在子JSP:include之后,获取值-String result=(String)request.getAttribute(“myAttrName”);
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
<c:set var="myVar" scope="request" value="Hello"/>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
<jsp:include page="b.jsp"></jsp:include>
<span>
The value is ${requestScope.myVar}.
</span>
<%@ include file="myFile.jsp" %>
<jsp:include file="myFile.jsp" />
<% request.setAttribute("attrName", myValue) %>
<% myValue = (MyValueType)request.getAttribute("attrName") %>