想即时创建文本框有可能吗?
选择要运行的报告:
<h:selectOneMenu value="#{reportBean.selectReport}">
<f:selectItems value = "#{reportBean.allReports}" />
<f:ajax listener="#{reportBean.getReqID}" render="reqID"> </f:ajax>
</h:selectOneMenu>
想即时创建文本框有可能吗?
选择要运行的报告:
<h:selectOneMenu value="#{reportBean.selectReport}">
<f:selectItems value = "#{reportBean.allReports}" />
<f:ajax listener="#{reportBean.getReqID}" render="reqID"> </f:ajax>
</h:selectOneMenu>
似乎您想<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 解决方案来在客户端处理这个问题。