ItemTypes のセットであるフィールドを持つ Item オブジェクトがあります。
public class Item {
EnumSet<ItemType> itemTypeSet;
...
public Set<ItemType> getItemTypeSet(){
return this.itemTypeSet;
}
}
もちろん、ItemType は単純な Enum です。
public Enum ItemType {
BOLD, THIN, COOL, ROUND;
}
私の JSP では、アイテムに特定の ItemType があるかどうかを確認するために JSTL を使用したいと考えています。次の 3 つのスニペットを使用しようとしましたが、エラーも結果も得られません。3つすべてが失敗する理由はわかりません。誰かがこれらの 3 つのケースのそれぞれについて、私が思うようにプログラムが機能しない理由を説明し、機能している 4 番目の代替案を提供できますか :)?
<c:if test="${item.itemTypeSet.contains('BOLD')}">
Method 1 works!
</c:if>
<c:if test="${item.itemTypeSet.contains(ItemType.valueOf('BOLD'))}">
Method 2 works!
</c:if>
<c:if test="${item.itemTypeSet.contains(ItemType.BOLD)}">
Method 3 works!
</c:if>
重要なのは、ItemType
列挙型がパブリックであり、別のクラス内ではないことです。EL/JSTL/JSP を解決するクラスを含め、他のクラスから完全にアクセスできます。
enumset 内のすべての値を繰り返し処理しても問題ないことに注意してください。
<c:forEach items="${item.itemTypeSet}" var="itemType">
<p>${itemType}</p>
</c:forEach>
結果として与えます:
BOLD
ROUND