jsf composite - > ajax监听器抛出异常

时间:2014-01-02 11:43:51

标签: java ajax jsf jsf-2

Mojarra:2.1.26

说明

我有非常简单的复合组件 hello.xhtml

<composite:interface>
    <composite:attribute name="value" />    
    <composite:attribute name="changeListener" method-signature="void listener(javax.faces.event.AjaxBehaviorEvent)" />
</composite:interface>

<composite:implementation>
    <h:inputText id="inputNameId" value="#{cc.attrs.value}">
        <f:ajax execute="@this" event="change" listener="#{cc.attrs.changeListener}"/>
    </h:inputText>
</composite:implementation>

如您所见,实现非常简单。这里的主要关键是ajax支持事件更改。

使用omposite组件:

<h:form id="formId">
        <hla:hello id="compositeId" value="#{helloController.name}"  changeListener="#{helloController.nameChangedListener}">
        </hla:hello>    
</h:form>

如您所见,使用了attrbiute changeListener 。我只是想听一听。在复合组件中,提供了方法签名。让我们看看支持bean,这非常简单:

  
@ManagedBean
@ViewScoped
public class HelloController implements Serializable{

private String name;

public String getName() {
    return name;
}

public void setName(String name) {
    this.name = name;
}

public void nameChangedListener(AjaxBehaviorEvent event){
    System.out.println("-nameChangedListener-");
    System.out.println("\tphase: " + event.getPhaseId());
}

}

监听器方法没有做任何特殊的事情,只是为了保持这个简单。

问题:

当我尝试运行此代码时,我总是遇到异常:

java.lang.ArrayIndexOutOfBoundException:0
...

如果我将复合组件中的method-signature更改为:

<composite:attribute name="changeListener" method-signature="void listener()" />

和支持bean的方法:

public void nameChangedListener(){ ... }

一切正常。

问题:

是否有机会将AjaxBehaviorEvent用作侦听器方法参数? 怎么做?

0 个答案:

没有答案