2010-08-23 74 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. 
}