4

交換できたら最高です

${myvar eq 'foo' or myvar eq 'bar' or myvar eq 'john' or myvar eq 'doe' or myvar eq ...}

いずれかによって

${myvar in ['foo', 'bar', 'john', 'doe', ...]}

また

${myvar in {'foo', 'bar', 'john', 'doe', ...}}

しかし、どれも機能しませんでした。代替ソリューションはありますか?

4

2 に答える 2

4

最初にそのための EL 関数を作成します。Facelets のキックオフの例はこの回答で見つけることができ、JSP の別のキックオフの例はEL wiki ページの下部付近にあります。

public static boolean contains(Object[] array, Object item) {
    if (array == null || item == null) {
        return false;
    }

    for (Object object : array) {
        if (object != null && object.toString().equals(item.toString())) {
            return true;
        }
    }

    return false;
}

(または、JSF ユーティリティ ライブラリOmniFacesを使用している場合は、その を使用しますof:contains()が、非推奨の JSP ではなく、Facelets でのみ機能します)

次に、次のように使用します。

<%@taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions" %>
<%@taglib prefix="my" uri="http://my.example.com/functions" %>
...
${my:contains(fn:split('foo,bar,john,doe', ','), myvar)}

(これは、区切り文字をfn:split()に変換する単なるトリックです)StringString[]

区切り文字列を直接渡すことでさらに単純化/特殊化し、関数で分割を実行して、次のようにすることもできます。

${my:contains('foo,bar,john,doe', myvar)}
于 2013-01-15T14:20:22.353 に答える
2

mylist名前のリストで変数を定義し、次を使用しcontainsます。

mylist.contains(myvar)
于 2013-01-15T14:13:20.833 に答える