gpt4 book ai didi

java - a4j :ajax listener exception MethodNotFoundException

转载 作者:行者123 更新时间:2023-11-30 07:22:17 26 4
gpt4 key购买 nike

我开始研究 RichFaces 4.2.2 并在简单示例中遇到问题,我有一个 xml:

<ui:define name="content">       
<h:form>
<rich:panel style="width: 50%">
<h:panelGrid columns="2">
<h:outputText value="Name:"/>
<h:inputText id="inp" value="#{echoBean.name}">
<a4j:ajax event="keyup" render="echo count" listener="#{echoBean.countListener}"/>
</h:inputText>

<h:outputText value="Echo:"/>
<h:outputText id="echo" value="#{echoBean.name}"/>

<h:outputText value="Count:"/>
<h:outputText id="count" value="#{echoBean.count}"/>
</h:panelGrid>
<a4j:commandButton value="Submit" actionListener="#{echoBean.countListener}" render="echo, count"/>
</rich:panel>
</h:form>

</ui:define>

和一个简单的 bean:

@Component("echoBean")
@Scope(value = "session")
public class EchoBean {
private String name;
private Integer count = 0;

//getter setter methods here

public void countListener(ActionEvent event) {
count++;
}
}

当我尝试在 inputText 中打印时出现异常:

Caused by: javax.el.MethodNotFoundException: /home.xhtml @35,112 listener="#{echoBean.countListener}": Method not found: com.example.training.bean.EchoBean@d523fa.countListener()
at com.sun.faces.facelets.el.TagMethodExpression.invoke(TagMethodExpression.java:102)
at org.ajax4jsf.component.behavior.MethodExpressionAjaxBehaviorListener.processAjaxBehavior(MethodExpressionAjaxBehaviorListener.java:71)
at javax.faces.event.AjaxBehaviorEvent.processListener(AjaxBehaviorEvent.java:113)
at javax.faces.component.behavior.BehaviorBase.broadcast(BehaviorBase.java:98)
at org.ajax4jsf.component.behavior.AjaxBehavior.broadcast(AjaxBehavior.java:348)
at javax.faces.component.UIComponentBase.broadcast(UIComponentBase.java:763)
at javax.faces.component.UIViewRoot.broadcastEvents(UIViewRoot.java:775)
at javax.faces.component.UIViewRoot.processApplication(UIViewRoot.java:1267)
at com.sun.faces.lifecycle.InvokeApplicationPhase.execute(InvokeApplicationPhase.java:82)
... 19 more

但是为什么?使用按钮,这个相同的监听器工作得很好,在 a4j:ajax 中的“监听器”参数的文档中它说:

表达式必须计算为采用 ActionEvent 参数且返回类型为 void 的公共(public)方法,或者计算为不采用任何参数且返回类型为 void 的公共(public)方法

为什么它使用 countListener() 而没有 ActionEvent 参数?我不明白。

最佳答案

为了能够在 RF4 中使用 listener 属性,您的 listener 方法应该采用 AjaxBehaviorEvent 类型的参数,而不是 ActionEvent类型。您可以从错误消息中看到的另一种替代方法是定义一个标准的 java 方法,该方法不接受参数并具有 void 返回类型,如

   public void countListener();

Why it uses countListener() without ActionEvent parameter? I don't get it.

这是 API 的契约(Contract),您必须遵守才能使用它。

关于java - a4j :ajax listener exception MethodNotFoundException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12856902/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com