14

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

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

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

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

乾杯、ドン

4

5 に答える 5

17

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

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

内のコード<%= %>はブール値を返すため、文字列「true」または「false」のいずれかを出力します。これはまさに<c:if>タグが探しているものです。

于 2008-09-18T15:42:46.727 に答える
11

次のようなものも使用できます

<c:if test="${ testObject.testPropert == "testValue" }">...</c:if>
于 2008-12-05T00:41:47.080 に答える
4

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

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

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

于 2008-09-18T15:38:02.463 に答える
2

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

jstl taglib docs を見ると、どの属性が最も再利用され、どの属性がそうでないかがわかります。http://java.sun.com/products/jsp/jstl/1.1/docs/tlddocs/index.html

于 2008-09-18T15:15:12.970 に答える
0

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

于 2008-09-18T15:37:18.270 に答える