JSPで次のようなコードを見ました
<c:if test="<%=request.isUserInRole(RoleEnum.USER.getCode())%>">
<li>user</li>
</c:if>
私の混乱は、test
属性の値に表示される "="にあります。私の理解は、<%= %>
は出力に出力されますが、testに割り当てられた値はブール値でなければならないので、なぜこれが機能するのですか?
ボーナスポイントについて、スクリプトレットコードを使用しないように上記の属性値を変更する方法はありますか?おそらく、代わりにELを使用することを意味します。
乾杯、ドン
何かが真であるかどうかを判別するためにtest
属性が検索するのは、文字列「true」だけです(大文字と小文字は区別されません)。たとえば、次のコードは「Hello world!」を出力します。
<c:if test="true">Hello world!</c:if>
<%= %>
内のコードはブール値を返すため、文字列 "true"または "false"を出力します。これは、<c:if>
タグが検索する文字列です。
<%=%>間の式は、c:ifタグが評価される前に評価されます。そのため、| request.isUserInRole |を想定します。 | true |を返す場合、例は最初にこれに評価されます。
<c:if test="true">
<li>user</li>
</c:if>
次にc:ifタグが実行されます。
JSPタグライブラリの属性は、一般に静的にすることも、要求時に解決することもできます。リクエスト時にそれらが解決されると、JSPは実行時に値を解決し、出力をタグに渡します。つまり、ほとんどすべてのJSPコードを属性に入れることができ、タグは生成される出力に応じて動作します。
Jstl taglib docsを見ると、どの属性がreuest timeでどの属性がreuest timeではないかがわかります。 http://Java.Sun.com/products/jsp/jstl/1.1/docs/tlddocs/index.html
<%=%>自体が出力に送信され、JSTLのコンテキストでは文字列として評価されます