2010-08-23 72 views
1
<h:form> 
    Do you have a driving license? 
    <h:selectOneMenu value="#{requestScope.license}"> 
     <f:selectItem itemLabel="Select..." itemValue=""/> 
     <f:selectItem itemLabel="Yes" itemValue="Y"/> 
     <f:selectItem itemLabel="No" itemValue="N"/> 
     <f:ajax render="@form"/> 
    </h:selectOneMenu> 
    <br/> 
    Enter driving license number: 
    <h:inputText value="#{requestScope.number}" 
     rendered="#{'Y' eq requestScope.license ? true : false}"/> 
    <br/> 
    <h:commandButton value="Submit"/> 
    <br/> 
    Your driving license number is: #{requestScope.number} 
</h:form> 

問題在實現一個非常普遍的情況下使用JSF 2.0由Ajax呈現的JSF 2.0輸入字段不能用於輸入值?

上面JSF 2.0的標記示出了非常常見的場景。

如果用戶在問題「您有駕照嗎?」中選擇「是」,那麼「輸入您的駕駛執照號碼:」字段由Ajax提供。

如果用戶輸入駕駛證號碼並按下按鈕,輸入數據應顯示在底部(根據我的理解),但沒有發生。

請任何人解釋這一點。

回答

4

您需要將屬性綁定到完全可管理的bean,並在h:outputText中顯示該數字,以便可以重新渲染它。

這是改進。

<h:form> 
    <h:outputLabel for="license" value="Do you have a driving license?" /> 
    <h:selectOneMenu id="license" value="#{bean.license}" required="true"> 
     <f:selectItem itemLabel="Select..." itemValue="" /> 
     <f:selectItem itemLabel="Yes" itemValue="Y" /> 
     <f:selectItem itemLabel="No" itemValue="N" /> 
     <f:ajax render="@form"/> 
    </h:selectOneMenu> 
    <br/> 
    <h:panelGroup id="input" rendered="#{bean.license eq 'Y'}"> 
     <h:outputLabel for="number" value="Enter driving license number:" /> 
     <h:inputText id="number" value="#{bean.number}" required="true" /> 
     <br/> 
    </h:panelGroup> 
    <h:commandButton value="Submit" action="#{bean.submit}"> 
     <f:ajax execute="@form" render="@form" /> 
    </h:commandButton> 
    <br/> 
    <h:outputText value="Your driving license number is: #{bean.number}" 
     rendered="#{bean.license eq 'Y' and not empty bean.number}" /> 
    <br/> 
    <h:messages /> 
</h:form> 

有了這樣一個bean:

@ManagedBean 
@ViewScoped 
public class Bean { 

    private String license; 
    private Integer number; 

    public void submit() { 
     System.out.println("Has license? " + license); 
     System.out.println("Submitted number: " + number); 
    } 

    // Add/generate getters and setters. 
}