次のコードはエラーの原因になります。
<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'".
test
をJSTLコードからJSPスクリプトレットに渡すにはどうすればよいですか?
スクリプトは生のJavaページコードに埋め込まれており、スクリプトで変数を宣言すると、ページに埋め込まれたローカル変数になります。
対照的に、JSTLはpage
、request
、またはsession
スコープのスコープ属性で完全に動作します。 test
を属性として釣り上げるためにスクリプトレットを作り直す必要があります。
<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>
のドキュメントを見ると、scope
をpage
、request
、またはsession
として指定できることがわかります。デフォルトはpage
です。
いっそのこと、スクリプトレットはまったく使用しないでください。赤ん坊のイエスを泣かせます。
@skaffmanはそれを打ち明けた。それらはそれぞれ独自のコンテキストで生きています。ただし、スクリプトレットをtheソリューションとして使用することは考えません。 avoid それらが必要です。 ELで文字列を連結するだけで、ELの文字列に対して+
演算子が失敗することを発見した場合(これは正しい)、次のようにします。
<c:out value="abc${test}" />
または、abc
が${resp}
という名前の別のスコープ変数から取得される場合、次のようにします。
<c:out value="${resp}${test}" />