由Ajax呈现的JSF 2.0输入字段不能用于输入值?

时间:2010-08-23 16:13:39

标签: ajax jsf jsf-2

<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实现非常常见方案时出现问题

上面的JSF 2.0标记描述了一种非常常见的情况。

如果用户对“您是否拥有驾驶执照?”这一问题选择“是”,则Ajax会显示“输入您的驾驶执照号码:”字段。

如果用户输入驾驶执照号码并按下按钮,输入数据应显示在底部(根据我的理解),但不会发生。

请有人解释一下。

1 个答案:

答案 0 :(得分: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.
}