Jsf 2 EL中带有varargs的Invoke方法抛出java.lang.IllegalArgumentException:参数数目错误

Jsf 2 EL中带有varargs的Invoke方法抛出java.lang.IllegalArgumentException:参数数目错误,jsf-2,el,Jsf 2,El,我正在使用JSF2 我有一个方法可以从值列表中检查匹配值: @ManagedBean(name="webUtilMB") @ApplicationScoped public class WebUtilManagedBean implements Serializable{ ... public static boolean isValueIn(Integer value, Integer ... options){ if(value != null){ for(Inte

我正在使用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)}
但它给了我一个:

严重[javax.enterprise.resource.webcontainer.jsf.context](http localhost/127.0.0.1:8080-5)java.lang.IllegalArgumentException:参数数量错误


有没有办法从EL执行这样的方法?

没有,在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功能

#{[2,3,5].contains(OtherBean.category.id)}

不,在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功能

#{[2,3,5].contains(OtherBean.category.id)}