web-dev-qa-db-ja.com

JSTL <c:if>タグのテスト属性

JSPで次のようなコードを見ました

<c:if test="<%=request.isUserInRole(RoleEnum.USER.getCode())%>">
    <li>user</li>
</c:if>

私の混乱は、test属性の値に表示される "="にあります。私の理解は、<%= %>は出力に出力されますが、testに割り当てられた値はブール値でなければならないので、なぜこれが機能するのですか?

ボーナスポイントについて、スクリプトレットコードを使用しないように上記の属性値を変更する方法はありますか?おそらく、代わりにELを使用することを意味します。

乾杯、ドン

14
Dónal

何かが真であるかどうかを判別するためにtest属性が検索するのは、文字列「true」だけです(大文字と小文字は区別されません)。たとえば、次のコードは「Hello world!」を出力します。

<c:if test="true">Hello world!</c:if>

<%= %>内のコードはブール値を返すため、文字列 "true"または "false"を出力します。これは、<c:if>タグが検索する文字列です。

16
Michael

<%=%>間の式は、c:ifタグが評価される前に評価されます。そのため、| request.isUserInRole |を想定します。 | true |を返す場合、例は最初にこれに評価されます。

<c:if test="true">
    <li>user</li>
</c:if>

次にc:ifタグが実行されます。

4
Mike Spross

JSPタグライブラリの属性は、一般に静的にすることも、要求時に解決することもできます。リクエスト時にそれらが解決されると、JSPは実行時に値を解決し、出力をタグに渡します。つまり、ほとんどすべてのJSPコードを属性に入れることができ、タグは生成される出力に応じて動作します。

Jstl taglib docsを見ると、どの属性がreuest timeでどの属性がreuest timeではないかがわかります。 http://Java.Sun.com/products/jsp/jstl/1.1/docs/tlddocs/index.html

2

<%=%>自体が出力に送信され、JSTLのコンテキストでは文字列として評価されます

0
Javaxpert