質問
式言語に関する基本的なものが欠けていると思います。
練習.jsp (下) 出力 14
, 、 予想通り。
<jsp:scriptlet>
request.setAttribute("a", 5);
request.setAttribute("b", 9);
</jsp:scriptlet>
${a+b}
practice2.jsp (下) 出力 0
.
<jsp:scriptlet>
Integer a = 5;
Integer b = 9;
</jsp:scriptlet>
${a+b}
practice2.jsp では何が起こっているのでしょうか?なぜ EL はこれらの変数を評価できないのでしょうか?これは範囲の問題ですか、それとももっと大きな何かが欠けているのでしょうか?
解決
式言語構文
${a + b}
.
は、ページ、要求、セッション、およびサーブレットのコンテキスト内のKeys a
とb
を持つ属性を探し、最初のITの検出を返します。スクリプトレットで宣言されている変数を読み取る方法はありません。
この記事など。
他のヒント
の JSP2.2仕様 変数がどのように解決されるかを説明します。
${product}
この式は、という名前の属性を検索します。 製品, 、検索 ページ、リクエスト、セッション、アプリケーション スコープ、そしてその価値を返します。属性が見つからない場合は、null が返されます。
これらのスコープは次のように文書化されています。
- ページスコープ -
Map
それはマップします ページスコープの 属性名をその値に関連付けます- リクエストスコープ -
Map
それはマップします リクエストスコープの 属性名をその値に関連付けます- セッションスコープ -
Map
それはマップします セッションスコープの 属性名をその値に関連付けます- 適用範囲 -
Map
それはマップします アプリケーションスコープの 属性名をその値に関連付けます
スクリプトレット (<% %>
) は、JSP 構文から生成されたサーブレットに Java コードを直接挿入できる古いメカニズムです。つまり、ビューにビジネス ロジックを挿入できるようになります。
コードでは値が上記のスコープのいずれにも設定されていないため、式言語には表示されません。 変数リゾルバ.
SciRpletの変数の範囲はScipletに制限されています。 これを試してください:
<jsp:scriptlet>
Integer a = 5;
Integer b = 9;
pageContext.setAttribute("a", a);
pageContext.setAttribute("b", b);
</jsp:scriptlet>
. 所属していません StackOverflow