【问题标题】:PrimeFaces poll does not workPrimeFaces 民意调查不起作用
【发布时间】:2016-03-27 04:54:15
【问题描述】:

我需要在其他工作中使用<p:poll />。所以我尝试了 PrimeFaces ShowCase 代码:-

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" 
    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html xmlns="http://www.w3.org/1999/xhtml"
    xmlns:ui="http://java.sun.com/jsf/facelets"
    xmlns:h="http://java.sun.com/jsf/html"
    xmlns:f="http://java.sun.com/jsf/core"
    xmlns:rich="http://richfaces.org/rich"
    xmlns:p="http://primefaces.prime.com.tr/ui"
    xmlns:a4j="http://richfaces.org/a4j">
    <h:form>
    <h:outputText id="txt_count" value="#{counterView.number}" />
    <p:poll interval="3" listener="#{counterView.increment()}" update="txt_count" />
    </h:form>
</html>

而backing bean如下:-

package com.poll;

import java.io.Serializable;

import javax.faces.bean.ManagedBean;
import javax.faces.bean.ViewScoped;

@ManagedBean (name="counterView")
@ViewScoped
public class CounterView implements Serializable {

    /**
     * 
     */
    private static final long serialVersionUID = 1L;
    private int number;

    public int getNumber() {
        return number;
    }

    public void increment() {
        number++;
        System.out.println(number);
    }
}

它是这样工作的:在浏览器中number 显示为 0 并且不会改变。在控制台中,我可以看到它打印为 1 一次,然后什么也没有。

这里有什么问题?我在 JSF 2.1 上使用 PrimeFaces 3.4.2

【问题讨论】:

  • 应该可以,我唯一会尝试的是删除listener 属性中的(),例如#{counterView.increment} 而不是#{counterView.increment()}
  • &lt;p:poll process="@this" .../&gt;
  • 下次请阅读正确 PF 版本的文档以查看支持的内容
  • 您从哪个showcase 页面获得了该代码? XML 命名空间用于 PrimeFaces 2.x,它已经不存在多年了。我无法想象它仍然出现在他们的展示中。

标签: jsf primefaces


【解决方案1】:

p:poll 标签适用于以下内容,我在 Primefaces 5.2

注意: &lt;h:head/&gt; 标签是必需的,如果没有它,它会加载所需的 primefaces 相关的 js 文件。我相信这就是刷新在您的情况下不起作用的原因。

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" 
    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html xmlns="http://www.w3.org/1999/xhtml"
    xmlns:ui="http://java.sun.com/jsf/facelets"
    xmlns:h="http://java.sun.com/jsf/html"
    xmlns:f="http://java.sun.com/jsf/core"
    xmlns:p="http://primefaces.org/ui">

<h:head/>

<h:body>
        <h:form>
            <h:outputText id="txt_count" value="#{counterView.number}" />
            <p:poll interval="3" listener="#{counterView.increment}" update="txt_count" />
        </h:form>
</h:body>

</html>

还有托管 bean:

@ManagedBean(name="counterView")
@ViewScoped
public class CounterView implements Serializable {

    private int number = 100;

    public int getNumber() {
        return number;
    }

    public void increment() {
        System.out.println("Incrementing....");
        number++;
    }
}

你可以试试这些并比较它是否有效。

更新:最终解决方案

总结解决方案,沿着 &lt;h:head/&gt; 标签,升级到 Primefaces 的新版本 (5.x) 有助于解决问题,如 cmets 部分所示。

【讨论】:

  • 然后它说在类型 counterView (bean) 上找不到属性增量
  • 没有区别,监听器方法被调用一次,我可以看到它打印了一次增加的值(1),但它不打印,文本也没有改变。准确地说,它只轮询一次并停止
  • @SohamBanerjee 你有&lt;h:head/&gt; 标签吗?不确定,但可以复制/粘贴上面的代码并尝试,以排除任何错误的可能性。顺便问一下,你在哪个version of primefaces
  • 我完全复制了你的代码,但它仍然只执行一次,和以前一样。我所做的唯一更改是代替 listener="#{counterView.increment}" 我必须使用 listener="#{counterView.increment()}" ,否则我会收到我之前所说的错误
  • @SohamBanerjee 嗯..想知道为什么它不适用于listener="#{counterView.increment}"。看起来您使用的是相当旧的 Primefaces 3.4.2 版本。任何不迁移到 5.x 的理由。不过我试过 5.2。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-01-01
  • 1970-01-01
  • 2012-09-23
  • 2013-06-22
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多