一尘不染

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

jsp

我遇到了其他一些问题,它们描述了与我相似但不完全相同的情况。

我有两个应用程序上下文,并且我想将JSP从一个导入到另一个。我知道该怎么做:

<c:import context="/" url="/WEB-INF/jsp/foo.jsp"/>

但是,我也想将参数传递给import 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这只是用于调试这一问题)


阅读 250

收藏
2020-06-10

共1个答案

一尘不染

您将其设置为请求参数,因此也应将其作为请求参数。

由于您似乎也不喜欢scriptlet,因此以下是EL解决方案:

${param.someAttr}

请注意,在这种特殊情况下,<c:import>以上操作并不会增加任何额外的优势<jsp:include>。每当您要从其他上下文或完全不同的域导入文件时,此功能都非常有用,但是现在似乎并非如此。以下内容也应该已经起作用:

<jsp:include page="/WEB-INF/jsp/foo.jsp">
    <jsp:param name="someAttr" value="someValue" />
</jsp:include>

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

2020-06-10