Обновление p: graphicImage каждые n секунд

#jsf-2 #primefaces

#jsf-2 #первичные

Вопрос:

Мне было интересно, может ли кто-нибудь объяснить или указать мне на хороший ресурс, который поможет мне понять, как обновить p: graphicImage в Primefaces 5.0. То, что я пытаюсь сделать, довольно просто.

 <p:graphicImage value="myImage.png"/>
  

Имя файла никогда не меняется, но оно будет обновляться каждые n секунд. Я пытаюсь найти самый простой способ обновлять это изображение каждые n секунд. В этом случае мы будем говорить каждые 5.

tyia

Обновление: Я пробовал приведенные ниже предложения, но опрос не обновляется. Я тестировал это в IE, FF и Chrome. Я использую пример кода для простых граней. Вот мой компонент:

 @ManagedBean
@ViewScoped
public class CounterView implements Serializable {

    private int number;

    public int getNumber() {
        return number;
    }

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

Я выводю на консоль, чтобы посмотреть, выполняется ли когда-либо increment (), но это не так.

Вот мой xhtml:

 <?xml version='1.0' encoding='UTF-8' ?>
<!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:h="http://java.sun.com/jsf/html"
      xmlns:p="http://primefaces.org/ui">
    <h:head>
        <title></title>
    </h:head>
    <h:body>
        <h:form>       
            <p>Welcome, #{loginBean.uname}</p>
        <p:commandButton action="#{loginBean.logout}" value="Logout"  ajax="false"></p:commandButton>
        <br/>
        <h:form>
          <h:outputText id="txt_count" value="#{counterView.number}" />
          <p:poll interval="3" listener="#{counterView.increment}" update="txt_count" />
        </h:form>
    </h:form>
    </h:body>
</html>
  

Приведенная выше страница, на которую я перенаправляю после успешного входа в систему. Все выходные данные верны, за исключением txt_count….it остается равным 0. Я извлек изображение, чтобы заставить это работать, прежде чем применять его к обновлению изображения.

Обновление 2: Заработал счетчик int

 <?xml version='1.0' encoding='UTF-8' ?>
<!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:h="http://java.sun.com/jsf/html"
      xmlns:p="http://primefaces.org/ui">
    <h:head>
        <title></title>
    </h:head>
    <h:body>
        <h:form>       
            <p>Welcome, #{loginBean.uname}</p>
        <p:commandButton action="#{loginBean.logout}" value="Logout"  ajax="false"></p:commandButton>
        <br/>
                  <h:outputText id="txt_count" value="#{counterView.number}" />
          <p:poll interval="3" listener="#{counterView.increment}" update="txt_count" />
    </h:form>
    </h:body>
</html>
  

Ответ №1:

Вы могли бы использовать компонент опроса с методом прослушивания, который изменяет изображение.

 <p:poll interval="3" listener="#{your_method_to_change_the_image()}" update="myImage" />
<p:graphicImage id="myImage" value="myImage.png"/>
  

Отказ от ответственности: Не тестировался.

Ответ №2:

Согласно руководству пользователя Primefaces, стр. 247, вы можете использовать p: imageSwitch для слайд-шоу. Например:

 p:imageSwitch effect="FlyIn">
   <p:graphicImage value="/images/nature1.jpg" />
   <p:graphicImage value="/images/nature2.jpg" />
   <p:graphicImage value="/images/nature3.jpg" />
   <p:graphicImage value="/images/nature4.jpg" />
</p:imageSwitch>
  

Вы также можете установить скорость. Если я вас правильно понял и вы меняете изображение на сервере, я думаю, вы можете просто чередовать 2 изображения с одинаковым URL. Если браузер считывает кэшированное изображение вместо обновленного, я думаю, вы можете добавить текущую дату к URL.