2016-03-27 3 views
-1

Мне нужно использовать <p:poll /> в некоторых других работах. Так что я пытался из PrimeFaces ShowCase код: -Опрос PrimeFaces не работает

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

И подкладочный боб, как показано ниже: -

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 и не изменяется , В консоли я вижу, что он печатает один раз, а затем ничего.

Что здесь не так? Я использую PrimeFaces 3.4.2 на JSF 2.1

+0

Должен работать, Единственное, что я попробовал бы - это удалить '()' в атрибуте 'listener', например' # {counterView.increment} 'вместо' # {counterView.increment()} ' –

+0

'

' – Tiny

+0

По-прежнему не работает –

ответ

3

Тег 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> 

И управляемый компонент:

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

Вы можете попробовать с этим и сравнить, если он работает.

UPDATE: Окончательное решение

Резюмируя решение, по <h:head/> теге, обновление до новой версии (5.x) из Primefaces помогли решить эту проблему, как указано в разделе комментариев.

+0

Но тогда он говорит, что приращение свойства не найдено на типе counterView (bean) –

+0

@SohamBanerjee Пожалуйста, проверьте мой обновленный ответ. –

+0

Не имеет значения, метод прослушивателя вызывается один раз, я вижу, что он печатает однократно увеличенное значение (1), но затем он не печатает и текст не изменяется. Точно, это опрос только один раз и остановка –

Смежные вопросы