我在我的应用程序中使用Spring 2.5。在视图中我有主jsp,其中我包含了另一个jsp。我在主jsp中使用c:set标签声明了一个变量,我无法在jsp中访问它。下面是代码 main.jsp中
<c:set var="hPediquestStudy"><spring:message code="study.hpediquest.mapping" /></c:set>
<c:set var="currentStudy" value='<%=(String)session.getAttribute("currentStudy")%>'/>
<html>
<head>
</head>
<body>
<c:if test="${currentStudy eq hPediquestStudy}">
Variables are equal
</c:if>
<c:if test="${currentStudy ne hPediquestStudy}">
Variables are not equal
</c:if>
<jsp:include page="/WEB-INF/jsp/included.jsp"></jsp:include>
</body
</html>
included.jsp
<c:if test="${currentStudy eq hPediquestStudy}">
hPediquestStudy Variable is accessible
</c:if>
<br/>currentStudy : ${currentStudy}
<br/>hPediquestStudy : ${hPediquestStudy}
我正在获得输出
变量相等
currentStudy:hPediquest
hPediquestStudy:
如果我在主jsp中包含jsp中设置该变量,我可以看到hPediquestStudy值的值。但是每次我加入jsp时我都不想设置它。请帮忙
答案 0 :(得分:12)
为什么在主jsp上两个值都相等而在包含jsp中我看不到它的值?
因为<c:set>
默认将它们存储在页面范围中。
为什么currentStudy在包含的jsp中显示其值?
因为它也可用作会话属性。
是否有任何解决方案可以帮助我访问父jsp中的变量集,可以在包含的jsps中访问?
您需要将scope
的{{1}}属性设置为<c:set>
或更高。 (默认)request
范围仅向当前JSP公开,而不是任何包含的JSP。
注意该行
page
不必要。 <c:set var="currentStudy" value='<%=(String)session.getAttribute("currentStudy")%>'/>
已经扫描了页面,请求,会话和应用程序范围中的变量。由于您显然已将其设置在会话范围内,因此无需将其复制到页面范围中。所以,只需删除该行。总而言之,您的前2行${currentStudy}
行应该替换为这一行:
<c:set>
然后它会以你想要的方式工作。