我遇到了一些其他问题,这些问题描述了我的类似但不完全相同的情况。例如,This question显示了几乎相同的问题,除了我没有使用portlet - 我只是使用无聊的'JSP + JSTL + EL +等。
我有两个应用程序上下文,我想将JSP从一个导入到另一个。我知道那是怎么做的:
<c:import context="/" url="/WEB-INF/jsp/foo.jsp"/>
但是,我还想将参数传递给导入的foo.jsp
。但是这段代码:
<c:import context="/" url="/WEB-INF/jsp/foo.jsp">
<c:param name="someAttr" value="someValue"/>
</c:import>
似乎没有将参数正确发送到foo.jsp
;如果foo.jsp
类似*
<% System.out.println("foo.jsp sees that someAttr is: "
+ pageContext.findAttribute("someAttr")); %>
然后打印出来:
foo.jsp sees that someAttr is: null
虽然我想看到这个:
foo.jsp sees that someAttr is: someValue
所以,很明显,someAttr
无法找到foo.jsp
。
如何解决此问题?
*(是的,我知道,scriplets==bad
,这只是为了调试这个问题)
答案 0 :(得分:6)
您将其设置为请求参数,因此您还应将其作为请求参数获取。
由于你似乎也不喜欢scriptlet,这是一个EL解决方案:
${param.someAttr}
请注意,<c:import>
在此特定情况下不会在<jsp:include>
之上添加任何额外优势。每当您想要从不同的上下文或完全不同的域导入文件时,它都很有用,但现在似乎并非如此。以下也应该有效:
<jsp:include page="/WEB-INF/jsp/foo.jsp">
<jsp:param name="someAttr" value="someValue" />
</jsp:include>
这样,包含的页面可以访问与主JSP相同的PageContext
和 HttpServletRequest
。这最终可能会更有用。