Pregunta

Tengo una página JSF en la que yo quiero tener una casilla de verificación que, al hacer clic, será añadir / quitar algunos otros campos de formulario en la página. Aquí está el (simplificado) Código Actualmente tengo para la casilla de verificación:

<h:selectBooleanCheckbox title="showComponentToReRender" value="#{backingBean.showComponentToReRender}">
    <a4j:support event="onsubmit" reRender="componentToReRender" />
</h:selectBooleanCheckbox>

Este es el código para el componente Quiero ocultar:

<h:selectOneMenu id="componentToReRender" value="#{backingBean.value}" rendered="#{valuesList.rowCount>1 &amp;&amp; backingBean.showComponentToReRender}">
   <s:selectItems value="#{valuesList}" var="value"/>
</h:selectOneMenu>

En la actualidad, al hacer clic en la casilla no hace nada; que "selectOneMenu" no va a desaparecer. ¿Qué estoy haciendo mal?

¿Fue útil?

Solución

Es necesario para envolver el componentToReRender, ya sea en:

<h:panelGroup id="componentToReRenderWrapper">

o

<a4j:outputPanel id="componentToReRenderWrapper">

Así que, efectivamente, dispondrá de:

<h:panelGroup id="componentToReRenderWrapper">
    <h:selectOneMenu id="componentToReRender" value="#{backingBean.value}" rendered="#{valuesList.rowCount>1 &amp;&amp; backingBean.showComponentToReRender}">
       <s:selectItems value="#{valuesList}" var="value"/>
    </h:selectOneMenu>
</h:panelGroup>

y cambiar el reRender="componentToReRenderWrapper" en caso de que utilice panelGroup o eliminar ese atributo, en caso de que utilice outputPanel.

Encontrados la explicación exacta en el RichFaces docs:

  

problema más común con el uso de reRender está apuntando al componente que tiene un atributo "prestado". Tenga en cuenta, que JSF no marca el lugar en el navegador DOM en el que el resultado del componente se debe colocar en caso de que la condición de "prestado" devuelve falso. Por lo tanto, después de que el componente se convierte prestados durante la petición Ajax, RichFaces entrega el código prestado al cliente, pero no actualiza una página, ya que se desconoce el lugar para su actualización. Es necesario señalar que uno de los componentes padre que no tiene atributo "prestado". Como alternativa, se puede envolver el componente con layout = "none".

Otros consejos

No se olvide de establecer ajaxRendered = "true" en el a4j: outputPanel

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top