Передать параметр в bean-компонент, связанный с диалоговым окном PrimeFaces Dialog Frameworks
У меня есть шаблон с кнопкой, которая открывает диалог:
<p:commandButton
id="roles-button"
icon="fa fa-key">
<f:setPropertyActionListener value="#{user}" target="#{userAdministrationView.selectedUser}" />
<f:actionListener binding="#{userAdministrationView.openUserRolesDialogWithParameters()}"/>
<p:ajax
event="dialogReturn"
listener="#{dialogHandler.showMessage}"
update=":user-administration-form:user-administration-table"
global="false"
/>
</p:commandButton>
Основным компонентом для шаблона (userAdministrationView) является @ViewScoped.
Я хочу передать параметр selectedUser
в диалоге. Возможно ли это с использованием Faces.setContext/Request/FlashAttribute, как рекомендовано здесь? Я пытался реализовать это так:
public void openUserRolesDialogWithParameters() {
Faces.setContextAttribute("user", selectedUser);
dialogHandler.openDialog("user-roles-dialog");
}
и в диалогах, поддерживающих bean-компонент (тоже @ViewScoped):
@PostConstruct
public void init() {
this.user = Faces.getContextAttribute("user");
...
}
но я получаю null
в user
, Тот же результат с setRequestAttribute и setFlashAttribute.
Здесь предлагается создать бин @SessionScoped со свойствами, но это решение выглядит для меня не очень актуально. Это единственный способ?
1 ответ
Благодаря BalusC я начал искать в правильном направлении, и я нашел это объяснение. Итак, это работает так:
бэк шаблона:
public void openUserRolesDialogWithParameters() {
Map<String, Object> sessionMap = FacesContext.getCurrentInstance().getExternalContext().getSessionMap();
sessionMap.put("user", selectedUser);
dialogHandler.openDialog("user-roles-dialog", "contentWidth", "500");
}
компонент поддержки диалога:
@PostConstruct
public void init() {
Map<String, Object> sessionMap = FacesContext.getCurrentInstance().getExternalContext().getSessionMap();
this.user = (UserModel) sessionMap.get("user");
sessionMap.remove("user");
...
}