【问题标题】:JSF 2.0 Input field rendered by Ajax cannot be used to input values?Ajax 渲染的 JSF 2.0 输入字段不能用于输入值?
【发布时间】:2010-08-23 16:13:38
【问题描述】:
<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 呈现。

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

请任何人解释一下。

【问题讨论】:

    标签: ajax jsf jsf-2


    【解决方案1】:

    您需要将属性绑定到一个完全有价值的托管 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.
    }
    

    【讨论】:

      猜你喜欢
      • 2017-03-05
      • 1970-01-01
      • 1970-01-01
      • 2023-03-23
      • 2019-09-23
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多