如何在JSF中发送没有inputtext的ajax?

时间:2013-06-08 16:04:29

标签: jsf

以下是我的观点:

<h:body>
    <h3>JSF 2.0 Hello World Example - hello.xhtml</h3>
    <h:form id="test" prependId="false">
        <h:commandButton value="Increase counter">
            <f:ajax execute="#{user.increaseCounter()}" render="x" />
        </h:commandButton>
        <h:outputText id="x" value="#{user.counter}"/>
    </h:form>
</h:body>

和User.Java:

@Named
@SessionScoped
public class User implements Serializable {

    private int counter;

    @PostConstruct
    public void postConstruct() {
        counter = 0;
    }

    public void increaseCounter() {
        counter++;
    }

    public int getCounter() {
        return counter;
    }

    public void setCounter(int counter) {
        this.counter = counter;
    }
}

所以我期望看到的是:每当我点击增加计数器按钮时,屏幕上会增加一个值。

当我调试我的应用程序时,我看到计数器增加了,但它没有被渲染。为什么会这样?

1 个答案:

答案 0 :(得分:2)

根据评论(主要来自BalusC),OP犯了一个错误:

<f:ajax execute="#{user.increaseCounter()}" render="x" />

冥想

<f:ajax listener="#{user.increaseCounter()}" render="x" />

他遇到的行为实际上是在每次点击而不是在渲染时增加了值。这是因为在渲染时他的方法increaseCounter()因为它是一个EL表达式,但当然它没有返回任何内容所以没有进一步执行。