У моего приложения есть параметр запроса в URL, который используется для отображения различных данных с использованием одного и того же xhtml (всего динамического содержимого) в таблице данных.
Область действия bean-объекта - это область действия сеанса, таблица данных отображает все данные и имеет множество элементов ввода, которые открывают различные диалоговые окна.
Если я открою другую вкладку браузера и отправлю другой параметр запроса, таблица данных будет отображаться идеально, однако если я вернусь к первой вкладке, все командные ссылки не будут вызывать действия, и все приложение начнет работать очень хаотично.
Согласно моим исследованиям, это потому, что я изменил данные в таблице данных, я попытался назвать их динамическими идентификаторами, именами динамических виджетов, но, похоже, ничего не работает.
<f:metadata>
<f:viewParam name="param" value="#{moduleBean.param}"/>
<f:viewAction action="#{moduleBean.setup}" />
</f:metadata>
<c:set var="module" value="#{moduleBean.param}" />
<p:dataTable id="#{module}-dataTable" value="#{moduleBean.model[module]}" var="data">
<p:commandLink action="#{moduleBean.openModuleDetails}" update=":#{module}-searchDialog" oncomplete="PF('#{module}-searchWidget').show();">
<f:param name="module" value="#{module}" />
<f:param name="dataRow" value="#{data.dbKey}" />
</p:commandLink>
</p:dataTable>
@Named
@javax.faces.view.ViewScoped
public class ModuleBean implements Serializable {
private String param;
public void setup() throws IOException {
this.model.put(this.param, new LazyDataModel(this.param));
}
public Map<String, LazyDataModel> getModel() {
return model;
}
}
Это создает все ожидаемые HTML со всеми правильными идентификаторами на каждой вкладке, однако JSF все еще не обрабатывает действие внутри командной ссылки. Само собой разумеется, если я придерживаюсь только одной вкладки браузера, все работает отлично.
Иногда он начинает работать после двойного щелчка по ссылке, но переход назад и вперед между вкладками браузера в конечном итоге всегда приводит к сбою.
Добавление прослушивателя действий к командной ссылке также не исправило это.
Любые предложения о том, как заставить JSF обрабатывать один и тот же объект данных как разные сущности на одной странице, но с разными параметрами?