5

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

4

4 回答 4

3

您如何在父级中包含“子”jar?静态导入还是动态导入?

如果你有

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

改变它

<jsp:include file="myFile.jsp" />

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

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

最后,在“子”jsp 中:

<% myValue = (MyValueType)request.getAttribute("attrName") %>
于 2013-07-22T21:16:14.983 回答
1

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

于 2013-07-22T21:10:32.653 回答
1

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

b.jsp

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

父.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>
于 2013-07-22T21:11:08.080 回答
-1

您可以使用会话范围来完成此操作。

(b.jsp)

session.setAttribute("value",value);

(c.jsp)

session.getAttribute("value");

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

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

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

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

于 2013-07-22T20:51:23.247 回答