如何通过跨上下文JSTL导入将参数传递给JSP?

Mat*_*all 5 java jsp jstl

我遇到了一些其他问题,这些问题描述了我的类似但不完全相同的情况.例如,这个问题显示了几乎相同的问题,除了我没有使用portlet - 我只是使用无聊的'JSP + JSTL + EL +等.

我有两个应用程序上下文,我想将JSP从一个导入到另一个.我知道那是怎么回事

<c:import context="/" url="/WEB-INF/jsp/foo.jsp"/>
Run Code Online (Sandbox Code Playgroud)

但是,我也想将参数传递给导入的foo.jsp.但是这段代码:

<c:import context="/" url="/WEB-INF/jsp/foo.jsp">
    <c:param name="someAttr" value="someValue"/>
</c:import>
Run Code Online (Sandbox Code Playgroud)

似乎没有正确发送参数foo.jsp; 如果foo.jsp是*

<% System.out.println("foo.jsp sees that someAttr is: "
                      + pageContext.findAttribute("someAttr")); %>
Run Code Online (Sandbox Code Playgroud)

然后打印出来:

foo.jsp sees that someAttr is: null
Run Code Online (Sandbox Code Playgroud)

而我想看到这个:

foo.jsp sees that someAttr is: someValue
Run Code Online (Sandbox Code Playgroud)

所以,显然,someAttr无法找到foo.jsp.

我该如何解决?


*(是的,我知道,scriplets==bad这只是用于调试这个问题)

Bal*_*usC 6

您将其设置为请求参数,因此您还应将其作为请求参数获取.

既然你似乎也不喜欢scriptlets,这里是一个EL解决方案:

${param.someAttr}
Run Code Online (Sandbox Code Playgroud)

请注意,在此特定情况下,<c:import>不会增加任何额外优势<jsp:include>.每当您想要从不同的上下文或完全不同的域导入文件时,它都很有用,但现在似乎并非如此.以下也应该有效:

<jsp:include page="/WEB-INF/jsp/foo.jsp">
    <jsp:param name="someAttr" value="someValue" />
</jsp:include>
Run Code Online (Sandbox Code Playgroud)

通过这种方式,包括页面访问相同PageContext ,并 HttpServletRequest作为主JSP.这最终可能会更有用.