【发布时间】:2017-08-31 16:04:46
【问题描述】:
我有一个带有打开对话框的按钮的模板:
<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) 的支持 bean 是 @ViewScoped。
我想将参数selectedUser 传递给对话框。是否可以使用 Faces.setContext/Request/FlashAttribute,如建议的here?我试图像这样实现它:
public void openUserRolesDialogWithParameters() {
Faces.setContextAttribute("user", selectedUser);
dialogHandler.openDialog("user-roles-dialog");
}
在对话框中支持 bean(也是 @ViewScoped):
@PostConstruct
public void init() {
this.user = Faces.getContextAttribute("user");
...
}
但我在user 中得到null。 setRequestAttribute 和 setFlashAttribute 的结果相同。
Here 建议使用属性创建@SessionScoped bean,但这个决定对我来说似乎不太相关。这是唯一的方法吗?
【问题讨论】:
标签: jsf primefaces parameter-passing dialog-framework