为什么jsp:包含参数不可见

时间:2011-04-25 16:05:56

标签: jsp jspinclude param

我和这张海报有完全相同的基本问题about accessing jsp:param values;按照他的例子完全不适合我。通过jsp:include传入的参数似乎不会显示在包含的文件中。我的设置有什么特别的东西吗?

呼叫者:

<div>
    <jsp:include page="../../../common/callee.jsp">
        <jsp:param name="justinVar" value="primary" />
    </jsp:include>      
</div>

callee.jsp:

<i>method 1: [</i><b><%= request.getParameter("justinVar") %></b><i>]</i>
<p/>
<i>method 2: [</i><b>${param.justinVar}</b><i>]</i>
<p/>
<i>method 3: [</i><b>${justinVar}</b><i>]</i>
<p/>

最终输出:

method 1: [null]

method 2: []

method 3: [] 

更新: 以下解决方法确实工作,似乎是错误的,但也许它工作的事实揭示了一些无法正常工作的事情。

<c:set var="justinVar" value="justinVARisHere" scope="request" />
<jsp:include page="../../../common/callee.jsp" />

5 个答案:

答案 0 :(得分:3)

要确定问题,请尝试通过在EL中打印${param}或在Java代码中打印HttpServletRequest#getParameterMap()来调试/浏览整个地图。它必须提供有关地图真正包含的内容的见解。

答案 1 :(得分:1)

右。 我有一个类似的问题,在最后一个小时左右,我找到了一个解决方案。

我有index.jsp并尝试在其中包含news.jspf,其中包含来自index.jsp中jsp参数的文本 它没用。它只是将news.jspf EL显示为普通文本。

我将包含的文件扩展名从.jspf更改为.jsp,它修复了问题。

我正在使用Eclipse,这可能是也可能不是因素。

祝你好运

答案 2 :(得分:0)

我已经跟踪了生成的java源代码,看起来很合理。发生以下两种情况之一:org.apache.jasper.runtime.JspRuntimeLibrary.URLEncode正在弄乱变量名称,或者使用的类加载器解析为JspRuntimeLibrary到驱动Web应用程序的其他实例。

// caller.jsp ....
org.apache.jasper.runtime.JspRuntimeLibrary.include(request, response, 
  "callee.jsp" + (("callee.jsp").indexOf('?')>0? '&': '?') + 
  org.apache.jasper.runtime.JspRuntimeLibrary.URLEncode("justinVar",
  request.getCharacterEncoding())+ "=" +
  org.apache.jasper.runtime.JspRuntimeLibrary.URLEncode("primary", 
  request.getCharacterEncoding()), out, true
);

查看Jasper的运行时,我们发现了这个宝石。目前尚不清楚这是否存在问题,但是正在呈现的页面是jsp:include来自defaultParent.jsp,尽管jsp:params传入jsp:include from defaultParent似乎也没有出现。

  958           // FIXME - It is tempting to use request.getRequestDispatcher() to
  959           // resolve a relative path directly, but Catalina currently does not
  960           // take into account whether the caller is inside a RequestDispatcher
  961           // include or not.  Whether Catalina *should* take that into account
  962           // is a spec issue currently under review.  In the mean time,
  963           // replicate Jasper's previous behavior

答案 3 :(得分:0)

这项工作在我的Liferay portlet中

ParamUtil.getString(PortalUtil.getOriginalServletRequest(request), "justinVar")

答案 4 :(得分:0)

如果请求被包装(即HttpServletRequestWrapper),可能会通过过滤器发生此问题。  请参阅:jsp:param no longer sets parameters when original request is wrapped with a HttpServletRequestWrapper