【问题标题】:Ajax update executes once though event occurs many times尽管事件发生多次,但 Ajax 更新执行一次
【发布时间】:2014-03-22 00:46:25
【问题描述】:

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

我正在尝试一个简单的示例,例如有一个 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>

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

【问题讨论】:

  • 您是否尝试过通过事件进行调试?每次按下按钮时都会调用它吗?如果是这样,this.count 又是第二次 0 了吗?

标签: java ajax jsf events primefaces


【解决方案1】:

counterbean 需要是 viewscoped。

【讨论】:

    【解决方案2】:

    参考:http://www.primefaces.org/documentation

    在你的情况下,更好的事件是 keyup 我认为它在 primefaces 中没有按键事件。

    用户指南 4.0 中的第 8.3 节

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

    您的 ManagedBean 只是 RequestScoped - 因此它会重新初始化每个请求... 将其更改为 @ViewScoped。

    关于 bean 的一个很棒的文档是: http://balusc.blogspot.com.au/2011/09/communication-in-jsf-20.html#ManagedBeanScopes

    【讨论】:

    • 我也尝试过该事件。我一直在阅读 PF 用户指南,但在那里找不到解决方案! PD:有一个按键事件:)
    • 哦,太好了 - 请参阅我更新的答案,更改您的 bean 范围 :)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-02-02
    • 2019-10-15
    • 2021-07-24
    • 2013-10-01
    相关资源
    最近更新 更多