f:ajax execute =“@ this”不会触发侦听器方法

时间:2014-02-20 07:49:10

标签: ajax jsf-2 jsf-2.2

在以下情况中,它从不调用侦听器方法。

TestBean.java

import java.io.Serializable;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.ViewScoped;

@ViewScoped
@ManagedBean(name="testBean")
public class TestBean implements Serializable {

    private int score1;
    private int score2;
    private int score3;

    public void resetPage(){
        score1 = 35;
        score2 = 35;
        score3 = 35;
    }

    public int getScore1() {
        return score1;
    }

    public void setScore1(int score1) {
        this.score1 = score1;
    }

    public int getScore2() {
        return score2;
    }

    public void setScore2(int score2) {
        this.score2 = score2;
    }

    public int getScore3() {
        return score3;
    }

    public void setScore3(int score3) {
        this.score3 = score3;
    }

}

requirements.xhtml

<h:form id="requirementsForm" prependId="false">
    <h:messages style="color: #FF0000; font-size: 13px; margin: 10px; white-space: nowrap;" /> 
    <table>
    <tr>
        <td> Score 1: </td>
        <td>
            <h:inputText value="#{testBean.score1}" required="true" />
        </td>
    </tr>
    <tr>
        <td> Score 2: </td>
        <td>
            <h:inputText value="#{testBean.score2}" required="true" />
        </td>
    </tr>
    <tr>
        <td> Score 3: </td>
        <td>
            <h:inputText value="#{testBean.score3}" required="true" />
        </td>
    </tr>
    <tr>
    <td colspan="2">
        <h:commandLink style="margin-left: 1px;" styleClass="submitLink">
             <img src="#{request.contextPath}/circuit_images/refresh.png" />
                  <f:ajax execute="@this"
                          render="@form" 
                          listener="#{testBean.resetPage}"/>
        </h:commandLink>
    </td>
    </tr>
    </table>
</h:form>

我知道执行的默认值是@this, 我删除了它&amp;尝试过同样的问题。 它从不调用testBean#resetPage()方法。

          <f:ajax execute="@this"
                  render="@form" 
                  listener="#{testBean.resetPage}"/>

当我更新execute =“@ form”时,它可以正常工作。

          <f:ajax execute="@form"
                  render="@form" 
                  listener="#{testBean.resetPage}"/>

表单中有一些输入字段,需要&amp;其他验证。 但是对于重置按钮,我不希望这些验证处理。

我在<h:commandLink> & <f:ajax>上添加了immediate =“true”,但没有奏效。 我正在使用JSF 2.2&amp; Tomcat 6.0.35。

我也提到了 http://www.primefaces.org/showcase/ui/resetInput.jsf &安培; http://omnifaces.org/docs/javadoc/current/org/omnifaces/eventlistener/ResetInputAjaxActionListener.html 我无法解决这个问题。

1 个答案:

答案 0 :(得分:-1)

将您的jsf版本降级为2.1。只有Tomcat 8支持java ee 7,而jsf 2.2是java ee 7特有的。