尽管事件多次发生,但Ajax更新执行一次

时间:2014-03-21 15:17:04

标签: java ajax jsf events primefaces

我开始学习Primefaces框架,基于JSF和AJAX,我遇到了一些麻烦。

我正在尝试一个简单的例子,比如有一个 inputText ,我试图设置一个计数器,每当在 inputText 上按下一个键时,该计数器会增加其值。为此,我使用了AJAX和Bean。问题是计数器只是第一次增加,之后它保持不变。这是我的代码:

网页

<!DOCTYPE html>
<html xmlns:h="http://java.sun.com/jsf/html"
xmlns:p="http://primefaces.org/ui">
<h:head>
    <title>AJAX LISTENER</title>
</h:head>
<h:body>
    <h:form>
        <h:inputText id="counter">
            <p:ajax update="out" event="keypress" listener="#{counterBean.increment}"/>
        </h:inputText>
        <br/>
        AJAX listener = <h:outputText id="out" value="#{counterBean.count}" />
    </h:form>
</h:body>
</html>

BEAN

import javax.faces.bean.ManagedBean;
import javax.faces.bean.RequestScoped;
@ManagedBean
@RequestScoped
public class counterBean {
    private int count;
    public counterBean() {
        this.count = 0;
    }
    public void increment(){
        this.count = this.count +5;
    }
    public void setCount(int count) {
        this.count = count;
    }
    public int getCount() {
        return count;
    }
}

2 个答案:

答案 0 :(得分:0)

请参阅:http://www.primefaces.org/documentation

在你的情况下,更好的事件是keyup 我不认为它在主要表面上有一个按键事件。

用户指南4.0中的第8.3节

  • 好的,你的回答其实非常简单,我做了测试,终于意识到了这一切的愚蠢...

您的ManagedBean只是RequestScoped - 因此它会在每个请求中重新获得... 将其更改为@ViewScoped。

豆子上很棒的doco是: http://balusc.blogspot.com.au/2011/09/communication-in-jsf-20.html#ManagedBeanScopes

答案 1 :(得分:0)

反粮需要进行观察。