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

时间:2010-10-13 03:20:10

标签: java jsp jstl

我遇到了一些其他问题,这些问题描述了我的类似但不完全相同的情况。例如,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,这只是为了调试这个问题)

1 个答案:

答案 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。这最终可能会更有用。