37

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

<c:set var="test" value="test1"/>
<%
    String resp = "abc"; 
    resp = resp + ${test};  //in this line I got an  Exception.
    out.println(resp);
%>

スクリプトレットで式言語「${test}」を使用できないのはなぜですか?

4

2 に答える 2

67

JSTL変数は実際には属性であり、デフォルトではページ コンテキスト レベルでスコープが設定されます。
その結果、スクリプトレットで JSTL 変数の値にアクセスする必要がある場合はgetAttribute()、適切なスコープのオブジェクト (通常はpageContextand 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 コードを記述できますが、Java コードでは記述でき${test}ません。


関係ない

于 2013-11-06T09:15:57.823 に答える
1

スクリプトレット コードの内容 ( 内<% %>) は、変換されたサーブレットのサービス メソッドに挿入される Java 言語コード スニペットです (JSP はサーブレット クラスに変換されます)。そこには有効な Java 構文しか入れられないため、式言語を使用することはできません。JSP に 2 つの文字列を追加する場合、最初の文字列が "abc" 定数で、2 番目の文字列が EL の値である場合、簡単に使用できます。

abc${test}

結果をスクリプト変数に保存する場合は、Aniket からの回答に従ってください (ただし、私のアドバイスは、スクリプトをまったく作成しないようにすることです)。

于 2013-11-06T09:31:12.563 に答える