我遇到了其他一些问题,它们描述了与我相似但不完全相同的情况。
我有两个应用程序上下文,并且我想将JSP从一个导入到另一个。我知道该怎么做:
<c:import context="/" url="/WEB-INF/jsp/foo.jsp"/>
但是,我也想将参数传递给import 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。
someAttr
我该如何解决?
*(是的,我知道,scriplets==bad这只是用于调试这一问题)
scriplets==bad
您将其设置为请求参数,因此也应将其作为请求参数。
由于您似乎也不喜欢scriptlet,因此以下是EL解决方案:
${param.someAttr}
请注意,在这种特殊情况下,<c:import>以上操作并不会增加任何额外的优势<jsp:include>。每当您要从其他上下文或完全不同的域导入文件时,此功能都非常有用,但是现在似乎并非如此。以下内容也应该已经起作用:
<c:import>
<jsp:include>
<jsp:include page="/WEB-INF/jsp/foo.jsp"> <jsp:param name="someAttr" value="someValue" /> </jsp:include>
通过这种方式,包括页面访问相同PageContext ,并 HttpServletRequest作为主JSP。最终可能会更有用。
PageContext
HttpServletRequest