5

关于访问 jsp:param 值,我有与此海报完全相同的基本问题;完全按照他的例子对我不起作用。通过jsp:include传入的参数似乎没有显示在包含的文件中。我的设置有什么特别之处吗?

呼叫者:

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

被调用者.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" />
4

5 回答 5

3

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

于 2011-04-26T20:34:40.720 回答
1

对。在过去的一个小时左右,我遇到了类似的问题,我找到了适合我的情况的解决方案。

我有 index.jsp 并尝试将 news.jspf 与 index.jsp 中的 jsp 参数中的文本一起包含在其中,但它不起作用。它只是将 news.jspf EL 显示为普通文本。

我将包含的文件扩展名从 .jspf 更改为 .jsp 并解决了问题。

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

祝你好运

于 2011-05-15T12:55:54.307 回答
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 的运行时,我们发现了这个 gem。尚不清楚这是问题所在,但是正在呈现的页面是来自 defaultParent.jsp 的 jsp:include,尽管从 defaultParent 传递到 jsp:include 的 jsp:params 似乎也没有出现。

  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
于 2011-04-26T16:27:44.420 回答
0

这项工作在我的 Liferay portlet 中

ParamUtil.getString(PortalUtil.getOriginalServletRequest(request), "justinVar")
于 2014-03-07T00:58:01.817 回答
0

如果请求被包装(即 HttpServletRequestWrapper),则可能会发生此问题,可能是通过过滤器。请参阅:当原始请求使用 HttpServletRequestWrapper 包装时,jsp:param 不再设置参数

于 2018-04-24T03:44:35.293 回答