PrimeFaces民意调查不起作用

时间:2016-03-27 04:54:16

标签: jsf primefaces

我需要在其他一些工作中使用<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>

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

1 个答案:

答案 0 :(得分:4)

p:poll标记对我有效,包含以下内容,我在Primefaces 5.2

注意: <h:head/>标记是必需的,如果没有它,它会加载所需的与要素相关的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++;
    }
}

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

更新:最终解决方案

总结解决方案,在<h:head/>标记中,升级到Primefaces的较新版本(5.x)有助于解决问题,如评论部分所示。