#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.