7

私はJSF2を使用しています。

値のリストから一致する値をチェックするメソッドがあります。

@ManagedBean(name="webUtilMB")
@ApplicationScoped
public class WebUtilManagedBean implements Serializable{ ...

public static boolean isValueIn(Integer value, Integer ... options){
    if(value != null){
        for(Integer option: options){
            if(option.equals(value)){
                return true;
            }
        }
    }
    return false;
}


...
}

ELでこのメソッドを呼び出すために、私は試しました:

#{webUtilMB.isValueIn(OtherBean.category.id, 2,3,5)}

しかし、それは私に与えました:

SEVERE [javax.enterprise.resource.webcontainer.jsf.context] (http-localhost/127.0.0.1:8080-5) java.lang.IllegalArgumentException: 引数の数が間違っています

ELからそのようなメソッドを実行する方法はありますか?

4

1 に答える 1

16

いいえ、EL関数はもちろん、ELメソッド式で変数引数を使用することはできません。

最善の策は、固定引数の量が異なる複数の異なる名前付きメソッドを作成することです。

public static boolean isValueIn2(Integer value, Integer option1, Integer option2) {}
public static boolean isValueIn3(Integer value, Integer option1, Integer option2, Integer option3) {}
public static boolean isValueIn4(Integer value, Integer option1, Integer option2, Integer option3, Integer option4) {}
// ...

疑わしい代替手段として、分割された文字列を渡し、メソッド内で分割することができます

#{webUtilMB.isValueIn(OtherBean.category.id, '2,3,5')}

または、分離された文字列上で作成された文字列配列でfn:split()すら

#{webUtilMB.isValueIn(OtherBean.category.id, fn:split('2,3,5', ','))}

ただし、いずれにしても、それらを整数として解析するか、渡された整数を文字列に変換する必要があります。

すでにEL3.0を使用している場合は、EL関数全体を必要とせずに新しいEL3.0コレクション構文を使用することもできます。

#{[2,3,5].contains(OtherBean.category.id)}
于 2013-03-22T01:12:43.420 に答える