传递参数给豆与PrimeFaces对话框架对话框
问题描述:
我有一个按钮模板,打开对话框相关:模板(userAdministrationView)传递参数给豆与PrimeFaces对话框架对话框
<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>
支持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,但是这个决定对我来说看起来不太相关。这是唯一的方法吗?
答
感谢BalusC,我开始搜索正确的方向,我发现this explanation。 所以,它的工作原理是这样的:
模板支持bean:
public void openUserRolesDialogWithParameters() {
Map<String, Object> sessionMap = FacesContext.getCurrentInstance().getExternalContext().getSessionMap();
sessionMap.put("user", selectedUser);
dialogHandler.openDialog("user-roles-dialog", "contentWidth", "500");
}
对话框支持bean:
@PostConstruct
public void init() {
Map<String, Object> sessionMap = FacesContext.getCurrentInstance().getExternalContext().getSessionMap();
this.user = (UserModel) sessionMap.get("user");
sessionMap.remove("user");
...
}