在支持bean中,我声明了以下方法
public boolean hasPermission(Object... objects) {
...
}
我正试图从JSF 2.0中调用它,如下所示:
<c:set var="hasPermission" scope="view" value="#{restrictions.hasPermission(entity)}" />
它抛出
javax.el.ELException: Cannot convert Entity of class com.testing.Entity to class [Ljava.lang.Object;
如果我传递两个参数,则抛出
Method hasPermission not found
我可以以某种方式从JSF 2.0中调用varargs方法吗?
答案 0 :(得分:2)
EL中没有正式支持Varargs。至少,它在EL specification.中没有指定。似乎也没有任何计划在即将到来的EL 3.0中引入它。
您需要寻找不同的解决方案。由于功能要求不清楚,我无法提出任何建议。
更新似乎Tomcat中提供的Apache EL解析器支持此功能。它至少不受Glassfish提供的Sun / Oracle EL解析器的支持。
答案 1 :(得分:2)
关于Tomcat 7 JSF 2.1.4的工作
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml"
xmlns:h="http://java.sun.com/jsf/html"
xmlns:f="http://java.sun.com/jsf/core">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
<title>Insert title here</title>
</head>
<body>
<h:form>
<h:commandButton value="click 1"
action="#{test.var('a','b',1,test.i,test.d,test.s,test.ss)}"/>
<h:commandButton value="click 2"
action="#{test.var('a','b',1)}"/>
<h:commandButton value="click 3"
action="#{test.var(test.i,test.d,test.s,test.ss)}"/>
</h:form>
</body>
</html>
The Bean:
@ManagedBean
public class Test {
private Integer i = 10;
private Double d = 10.0;
private String s = "varargs";
private String[] ss = new String[]{"1","2","3"};
public Integer getI() {
return i;
}
public void setI(Integer i) {
this.i = i;
}
public Double getD() {
return d;
}
public void setD(Double d) {
this.d = d;
}
public String getS() {
return s;
}
public void setS(String s) {
this.s = s;
}
public String[] getSs() {
return ss;
}
public void setSs(String[] ss) {
this.ss = ss;
}
public void var(Object...objects){
System.out.println(Arrays.toString(objects));
}
}
输出:点击1,2,3
[a,b,1,10,10.0,varargs,[Ljava.lang.String; @ 4fa9cba5]
[a,b,1]
[10,10.0,varargs,[Ljava.lang.String; @ 26b923ee]
这就是你要找的......因为你试图打电话的方式是空白的。