2017-08-31 104 views
0

我有一個按鈕模板,打開對話框相關:模板(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"); 
    ... 
} 

但我得到的usernull。 setRequestAttribute和setFlashAttribute的結果相同。

Here建議使用屬性創建@SessionScoped bean,但是這個決定對我來說看起來不太相關。這是唯一的方法嗎?

回答

0

感謝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"); 
    ... 
}