Вызов метода с переменными аргументами из JSF 2.0 - PullRequest
3 голосов
/ 28 марта 2012

В бэк-бэк я объявил следующий метод

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

Можно ли как-нибудь вызвать методы varargs из JSF 2.0?

Ответы [ 2 ]

2 голосов
/ 28 марта 2012

На 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>

Боб:

@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]

Это то, что вы ищете ... так как способ, которым вы пытаетесь вызвать вопрос, пуст.

2 голосов
/ 28 марта 2012

Varargs официально не поддерживается в EL. По крайней мере, это нигде не указано в спецификации EL. Также, похоже, не планируется вводить ее в предстоящем EL 3.0 .

Вам нужно искать другое решение. Поскольку функциональные требования неясны, я не могу предложить ни одного.


Обновление похоже, что анализатор Apache EL, поставляемый в Tomcat, поддерживает это. По крайней мере, он не поддерживается анализатором Sun / Oracle EL, поставляемым в Glassfish.

...