当我们触发selectoneMenu valueChangeListener事件时,我们可以在selectonemenu组件旁边创建文本框吗?

时间:2013-04-05 20:59:38

标签: jsf

想要动态创建文本框是否可能?
选择要运行的报告:

<h:selectOneMenu value="#{reportBean.selectReport}">
    <f:selectItems value = "#{reportBean.allReports}" />
    <f:ajax listener="#{reportBean.getReqID}" render="reqID"> </f:ajax>
</h:selectOneMenu>

1 个答案:

答案 0 :(得分:2)

好像你想根据<h:inputText>上的选定值显示/隐藏<h:selectOneMenu>。是的,这可以通过简单的JSF轻松实现。

请注意,如果您使用rendered属性设置为false,组件将不会出现在组件树中,因此无法为任何调用引用它(不是甚至ajax电话)。为了更新它,您应该将组件包装在另一个组件(如<h:panelGroup>)中并渲染包装器。基本示例:

<h:form id="frmRep">
    <h:selectOneMenu value="#{reportBean.selectReport}">
        <f:selectItems value = "#{reportBean.allReports}" />
        <!--
          assuming your reportBean.getReqID method will change the value of
          reportBean.showReqID attribute to render/not render it and works well
        -->
        <f:ajax listener="#{reportBean.getReqID}" render="pnlRepName" />
    </h:selectOneMenu>
    <h:panelGroup id="pnlRepName">
        <h:inputText id="reqID" rendered="#{reportBean.showReqID}"
            value="#{reportBean.reportName}" />
    <h:panelGroup>
</h:form>

对于这个特定的要求,我不建议使用ajax调用,因为它必须去服务器只检查组件是否应该向用户显示。我会选择JavaScript解决方案来处理客户端。