0

这是我的看法:

<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>

和用户.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;
    }
}

所以我希望看到的是:每次我单击“增加计数器”按钮时,屏幕上都会增加一个值。

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

4

1 回答 1

2

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

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

缪斯

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

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

于 2013-06-08T20:18:06.217 回答