55

次のコードではエラーが発生します。

 <c:set var="test" value="test1"/>
 <%
   String resp = "abc";
   resp = resp + test;
   pageContext.setAttribute("resp", resp);
 %>
 <c:out value="${resp}"/>

エラーは言う

"error a line 4: unknown symbol 'test'".

testJSTL コードから JSP スクリプトレットに渡すにはどうすればよいですか?

4

2 に答える 2

114

スクリプトは、ページ コードに埋め込まれた生の Java であり、スクリプトで変数を宣言すると、それらはページに埋め込まれたローカル変数になります。

対照的に、JSTL は at または scope のいずれかのスコープ属性で完全に機能pagerequestますsessiontestスクリプトレットを作り直して、属性として釣り上げる必要があります。

<c:set var="test" value="test1"/>
<%
  String resp = "abc";
  String test = pageContext.getAttribute("test");
  resp = resp + test;
  pageContext.setAttribute("resp", resp);
%>
<c:out value="${resp}"/>

のドキュメントを見ると、 、またはとして <c:set>指定できることがわかります。デフォルトはです。scopepagerequestsessionpage

いっそのこと、スクリプトレットをまったく使用しないでください。赤ちゃんイエスを泣かせます。

于 2010-08-25T21:11:45.187 に答える
15

@skaffmanはそれを釘付けにしました。彼らはそれぞれ独自の文脈で生きています。ただし、解決策としてスクリプトレットを使用することは検討しません。あなたはそれらを避けたいのです。ELで文字列を連結するだけで、+ELの文字列に対して演算子が失敗することがわかった場合(これは正しいです)、次のようにします。

<c:out value="abc${test}" />

または、abcという名前の別のスコープ変数から取得する場合は、次の${resp}ようにします。

<c:out value="${resp}${test}" />
于 2010-08-25T21:16:59.887 に答える