在子jsp中设置父jsp变量

时间:2013-07-22 20:37:22

标签: java jsp atg

我有一个父jsp a.jsp,其中包含另一个jsp b.jsp。我正在计算b.jsp中的一些值,这些值需要在父jsp a.jsp中使用,它将把这个计算出的值传递给另一个jsp,例如c.jsp。如何评估子jsp中的值并在该页面完全加载之前将其传递给父jsp?

4 个答案:

答案 0 :(得分:2)

你如何在父母中包括“孩子”jar?静态或动态导入?

如果你有

<%@ include file="myFile.jsp" %>

通过

进行更改
<jsp:include file="myFile.jsp" />

然后在父级中在请求中设置属性 (不在会话中,这将是“更脏”):

<% request.setAttribute("attrName", myValue) %>

最后,在“孩子”中jsp:

<% myValue = (MyValueType)request.getAttribute("attrName") %>

答案 1 :(得分:1)

如果你需要在包含和包含jsp(反之亦然)之间传递属性,你应该使用页面上下文,这是更短的上下文(从生命周期的角度来看)

答案 2 :(得分:1)

您可以在b.jsp中的请求中设置变量,并在parent.jsp中使用它们。但是你只能在&lt; jsp:include&gt;之后的父jsp中使用它们。标签。请记住,这一切都是在服务器端进行评估的,因此当您说“在该页面完全加载之前”时,可以保证服务器在浏览器加载之前对其进行了评估。如果您的意思是要延迟对服务器的评估,直到评估其下面的某些代码,那就不可能了。至少不是这样的。

b.jsp

<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
<c:set var="myVar" scope="request" value="Hello"/>

parent.jsp

<%@ 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>

答案 3 :(得分:-1)

你可以通过会话范围来实现这一目标。

(b.jsp)

session.setAttribute("value",value);

(c.jsp)

session.getAttribute("value");

但是,我建议做一些重大的重组。在您的示例中,数据的值取决于页面上元素的顺序。如果您需要重新安排事情(例如,在c.jsp包含之后移动b.jsp包含),则可能会破坏业务逻辑。

Web开发的一个好模式是模型 - 视图 - 控制器模式。 “控制器”确定应显示哪个页面,“模型”计算所有数据并使其可用,“视图”执行显示和格式化。

我建议您阅读本文,这有助于理解为什么MVC是一种有价值的方法: http://www.javaranch.com/journal/200603/Journal200603.jsp#a5

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