2012-02-13 58 views
1

我有以下示例代碼。 最初,只有commandButton 兩個是可見的。當我點擊這個按鈕時,commandButton One也是可見的。但是當我點擊一個,後臺bean方法click1不會被解僱。不能使用隱藏的命令按鈕與@RequestScoped支持豆

以下是我的代碼:

XHTML

<h:form id="form1"> 
    <h:inputHidden id="show" value="#{bean.show1}" /> 
    <h:commandButton id="button1" value="One" action="#{bean.click1}" 
     rendered="#{bean.show1}" /> 
</h:form> 
<h:form id="form2"> 
    <h:inputHidden id="show" value="#{bean.show1}" /> 
    <h:commandButton id="button2" value="Two" action="#{bean.click2}" /> 
</h:form> 

支持bean

@RequestScoped 
@Named("bean") 
public class JsfTrial implements Serializable { 

    private static final long serialVersionUID = 2784462583813130092L; 

    private boolean show1; // + getter, setter 

    public String click1() { 
     System.out.println("Click1()"); 
     return null; 
    } 

    public String click2() { 
     System.out.println("Click2()"); 
     setShow1(true); 
     return null; 
    } 

} 

我發現了一個非常詳實的答案被BalusC。

如果我理解正確的話,我的問題是由於5點這個答案的

這是否也意味着我們不能使用隱藏的命令按鈕@RequestScoped支持bean?

回答

6

您可以使用請求範圍,您應該只將條件作爲請求參數傳遞給<f:param>的後續請求,而不是通過JSF隱藏輸入字段<h:inputHidden>傳遞。隱藏輸入字段的值僅在「更新模型值」階段期間在模型中設置,而rendered屬性的條件已在早期的「應用請求值」階段期間進行了評估。

因此,使用<f:param>代替<h:inputHidden>

<h:form id="form1"> 
    <h:commandButton id="button1" value="One" action="#{bean.click1}" 
     rendered="#{bean.show1}"> 
     <f:param name="show1" value="#{bean.show1}" /> 
    </h:commandButton> 
</h:form> 
<h:form id="form2"> 
    <h:commandButton id="button2" value="Two" action="#{bean.click2}"> 
     <f:param name="show1" value="#{bean.show1}" /> 
    </h:commandButton> 
</h:form> 

這樣你就可以提取他們在bean的(後)構造請求參數。

public JsfTrial() { 
    String show1 = FacesContext.getCurrentInstance().getExternalContext().getRequestParameterMap().get("show1"); 
    this.show1 = (show1 != null) && Boolean.valueOf(show1); 
} 

醜陋,但是CDI不提供內置的註解其substituties JSF的@ManagedProperty("#{param.show1}")。然而,您可以使用homegrow這樣的註釋。

+0

您的回覆非常好1! – Makky 2012-02-13 13:10:56

+0

非常感謝你!這正是我所期待的。 – 2012-02-13 14:17:40

+0

不客氣。 – BalusC 2012-02-13 14:21:08