次のコードはエラーの原因になります。
<c:set var="test" value="test1"/>
<%
String resp = "abc";
resp = resp + ${test}; //in this line I got an Exception.
out.println(resp);
%>
Scriptlet.whyで式言語「$ {test}」を使用しませんか?
[〜#〜] jstl [〜#〜] 変数は実際には属性であり、デフォルトではページコンテキストレベルでスコープされます。
その結果、スクリプトレットのJSTL変数値にアクセスする必要がある場合、適切にスコープされたオブジェクトでgetAttribute()
メソッドを呼び出すことでアクセスできます(通常pageContext
およびrequest)。
resp = resp + (String)pageContext.getAttribute("test");
完全なコード
<c:set var="test" value="test1"/>
<%
String resp = "abc";
resp = resp + (String)pageContext.getAttribute("test"); //No exception.
out.println(resp);
%>
更新
しかし、なぜその例外が私に来るのか。
JSPスクリプトレット は、ページで使用されるスクリプト言語に有効なコードフラグメントを含めるために使用されます。スクリプトレットの構文は次のとおりです。
<%
scripting-language-statements
%>
スクリプト言語がJavaに設定されている場合、スクリプトレットはJavaプログラミング言語ステートメントフラグメントに変換され、JSPページのサーブレットのサービスメソッドに挿入されます。 。
スクリプトレットでは、Javaコードと${test}
in not Java code。
関連なし
スクリプトレットコードのコンテンツ(<% %>
)Java言語コードスニペットは、翻訳されたサーブレットのサービスメソッドに配置されます(JSPはサーブレットクラスに翻訳されます)。有効なJava構文のみJSPに2つの文字列を追加する場合、1つ目は定数「abc」で、2つ目はELの値である場合、簡単に使用できます
abc${test}
結果をスクリプト変数に保存する場合は、Aniketの回答に従ってください(ただし、スクリプトを作成しないようにすることをお勧めします)。