5

jsp:param 値へのアクセスについて、このポスターとまったく同じ基本的な質問があります。彼の例に従うことは、私にはうまくいきません。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" />
4

5 に答える 5

3

${param}問題を突き止めるには、EL またはHttpServletRequest#getParameterMap()Java コードで印刷して、マップ全体をデバッグ/探索してみてください。マップに実際に何が含まれているかについての洞察を提供する必要があります。

于 2011-04-26T20:34:40.720 に答える
1

右。過去1時間ほど同じような問題があり、私の場合の解決策を見つけました。

私は index.jsp を持っていて、index.jsp の jsp パラメータからのテキストを含む news.jspf を含めようとしましたが、うまくいきませんでした。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のランタイムの内部を見ると、この宝石が見つかります。これが問題であるかどうかは明らかではありませんが、レンダリングされるページは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ポートレットで機能します

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