Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/311.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/jsp/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 在子jsp中设置父jsp变量_Java_Jsp_Atg - Fatal编程技术网

Java 在子jsp中设置父jsp变量

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之

我有一个父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是一种有价值的方法:


编辑:正如其他用户所提到的,请求范围将比会话范围更清晰。但是,我仍然建议在写入任何显示内容之前先确定值

如果您需要在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") %>