我正在尝试记录按钮点击次数。 1.虽然表单无效,但应记录点击次数。表单中的字段值1是整数。因此,它还应考虑转换错误。 2.在支持bean时要采取的行动
我在ajax上尝试过监听器。
<h:form id="form">
<h:inputText id="in" name="in" value="#{listenBean.value1}" autocomplete="off">
</h:inputText>
<h:commandButton value="Click Me" action="#{listenBean.save}">
<f:ajax execute="@form" render="@form message eventcount" />
</h:commandButton>
<h:message for="in"/>
Button Clicks: <h:outputText id="eventcount" value="#{listenBean.eventCount}"/>
</h:form>
豆
public void eventCount(AjaxBehaviorEvent event) {
//increment the counter
}
public void save() {
//save
}
的问题:
当输入字段上的转换错误绑定到bean的整数时listener method is not called
。我输入值为&#34;一些文字&#34;。在这段时间内,不会调用听众。
版本:Mojaraa 2.2.8
这是正确的做法吗?我做错了吗。
有人可以帮助我。
答案 0 :(得分:3)
<h:outputText value>
并不表示应引用bean(侦听器)方法的方法表达式。它表示一个值表达式,它应该引用一个bean属性,然后将其作为(转义)文本输出到响应中。
最好的办法是挂钩组件的preRenderView
事件,并检查当前请求是否代表回发请求。
<h:form id="form">
<h:commandButton ...>
<f:ajax execute="@form" render="@form" />
</h:commandButton>
Button Clicks:
<h:outputText id="eventcount" value="#{listenBean.eventCount}">
<f:event type="preRenderView" listener="#{listenBean.incrementEventCount}" />
</h:outputText>
</h:form>
private int eventCount;
public void incrementEventCount(ComponentSystemEvent event) {
if (FacesContext.getCurrentInstance().isPostback()) {
eventCount++;
}
}
public int getEventCount() {
return eventCount;
}
请注意,render="@form"
已涵盖整个表单,因此无需在同一表单中指定单个组件。如果您在同一表单中有另一个ajax操作,并且您希望不对该事件进行计数,请确保render="..."
具体到足以使eventcount
无法覆盖{ {1}}组件。