Я создаю приложение, которое позволяет пользователям управлять задачей. Доступ к экрану мониторинга задач можно получить двумя пользователями: одновременно. Каждый пользователь может увидеть, запущена ли задача в данный момент, и может либо остановить ее, либо запустить. Всякий раз, когда один пользователь запускает/останавливает задачу, другой пользователь должен увидеть изменение состояния задачи на своем собственном экране.Почему не Primefaces не обновляет мою кнопку?
Однако код, который я построил, не работает. Когда пользователь запускает задачу, экран другого пользователя пытается немедленно остановить задачу. Затем начинается какая-то «война»: экран первого пользователя повторно активирует задачу, а второй пользователь повторно останавливает задачу и так далее.
Как я могу избежать этой войны?
Вот мой код:
taskMonitoring.xhtml
<p:poll
interval="5"
process="sbbActivateTask" />
<h:outputLabel
value="Activate task:" />
<p:selectBooleanButton
id="sbbActivateTask"
value="#{taskBean.state}"
onLabel="YES"
offLabel="NO"
valueChangeListener="#{taskBean.switchTask}"/>
TaskBean.java
@ManagedBean(name = "taskBean")
@ViewScoped
public class TaskBean {
public void setState(boolean b) {
// I deliberately put nothing here ...
}
public boolean getState() {
return TaskManager.getState();
}
public void switchTask() {
TaskManager.switchTask();
}
}
Я добавил р: Ajax, но теперь этот метод не срабатывает, когда я нажимаю BooleanButton. Что мне не хватает? – Stephan
Я нашел проблему: TaskBean отсутствовал метод setState. Однако гонка закончилась, но кнопка не обновляется, несмотря на p: poll ... – Stephan
Правильное наблюдение. Вам нужно будет использовать '', см. Edit. –