虽然表单无效,但请记录提交按钮单击次数

时间:2015-07-02 08:29:06

标签: jsf jsf-2 jsf-2.2

我正在尝试记录按钮点击次数。     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

这是正确的做法吗?我做错了吗。

有人可以帮助我。

1 个答案:

答案 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}}组件。