我正在使用以下技术开发应用程序:
- 汤姆猫 8
- 爪哇 8
- 素面 5.2.11
根据模式对话框中 SelectOneMenu 的选定值,我无法隐藏某些控件。Primefaces 文档显示了一个非常清晰和简单的示例,说明如何根据下拉列表的选定值更新页面(尽管示例的上下文不是在对话框中完成): http: //www.primefaces.org/showcase /ui/ajax/dropdown.xhtml。
我的代码如下:
<p:dialog
header="Abrir Incidencia"
id="dlgAbririncidenciaEstados"
closable="false" closeOnEscape="false"
width="1060" modal="true"
widgetVar="dlgAbririncidenciaEstados">
<h:outputText value="Tipo de incidencia"/>
<p:selectOneMenu id="selIncidenciaTipoEstados"
value="#{monitorizadorCentroControlador.abrirIncidenciaBean.incidenciaTipoSeleccionadoId}">
<f:selectItems
value="#{monitorizadorCentroControlador.abrirIncidenciaBean.listaIncidenciaTipos}"
var="incidenciaTipo"
itemLabel="#{incidenciaTipo.nombre}" itemValue="#{incidenciaTipo.id}"/>
<p:ajax update="txtOperarioAfectado comboOperarioAfectado"
listener="#{monitorizadorCentroControlador.abrirIncidenciaBean.alCambiarTipoIncidencia}"/>
</p:selectOneMenu>
<p:outputLabel
id="txtOperarioAfectado"
rendered="#{monitorizadorCentroControlador.abrirIncidenciaBean.incidenciaTipoSeleccionadoId == 8}"
value="#{monitorizadorCentroControlador.abrirIncidenciaBean.incidenciaTipoSeleccionadoId}"/>
<p:autoComplete
id="comboOperarioAfectado"
completeMethod="#{monitorizadorCentroControlador.abrirIncidenciaBean.autocompletarOperario}"
rendered="#{monitorizadorCentroControlador.abrirIncidenciaBean.incidenciaTipoSeleccionadoId == 8}"
forceSelection="true"
value="#{monitorizadorCentroControlador.abrirIncidenciaBean.operarioAfectadoSeleccionadoCodigo}"
var="codigo" itemLabel="#{codigo}" itemValue="#{codigo}">
<p:ajax event="itemSelect"
listener="#{monitorizadorCentroControlador.abrirIncidenciaBean.alCambiarOperario}"
update="dlgAbririncidenciaEstados"/>
<p:column>
<h:outputText value="#{codigo}"/>
</p:column>
</p:autoComplete>
</p:dialog>
另一方面,ajax 事件:
public void alCambiarTipoIncidencia(AjaxBehaviorEvent evt) {
RequestContext.getCurrentInstance().update("dlgAbririncidenciaEstados");
}
我的意图是让 Primefaces 渲染控件txtOperarioAfectado
并comboOperarioAfectado
基于selIncidenciaTipoEstados
. 为了测试它的操作,txtOperarioAfectado
我分配了 的值incidenciaTipoSeleccionadoId
。使用上面的代码片段,该值不会更新。但是,如果我删除了控件的渲染属性txtOperarioAfectado
,则值会更新,这导致我认为,至少在服务器端,当 的值incidenciaTipoSeleccionadoId
不同于 8 时,控件不会被渲染。但是在客户端它不会隐藏它。所以我的问题是如何隐藏控件txtOperarioAfectado
以及comboOperarioAfectado
何时不满足条件monitorizadorCentroControlador.abrirIncidenciaBean.incidenciaTipoSeleccionadoId == 8
?
我终于在这篇文章中找到了答案。正如@LuiggiMendoza 评论的那样:
就我而言,我试图直接更新对话框:
在这种情况下,我的问题的解决方案很简单,您只需引入一个新组件('panelMain'),该组件将包含控件
txtOperarioAfectado
和comboOperarioAfectado
. 最后,这是解决方案: