我和这张海报有完全相同的基本问题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" />
答案 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