我使用JSF 2。
我有检查从值列表匹配值的方法:
@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-本地主机/ 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', ','))}
但无论哪种方式,你仍然需要将其解析为整数,或者传入的整数转换为字符串。
如果你已经对EL 3.0,你也可以使用新的EL 3.0集合语法 ,而不需要对整个EL功能。
#{[2,3,5].contains(OtherBean.category.id)}
文章来源: Invoke method with varargs in EL throws java.lang.IllegalArgumentException: wrong number of arguments