PanelGroup no se procesa después de hacer clic en la acción del botón de comando

Tengo un conjunto de 2 grupos de paneles. un grupo de paneles contiene un campo y dentro, dos botones de radio y un botón de comando. Según la selección del botón de radio, el valor respetado se mostrará en otro grupo de paneles a través de una llamada ajax. Pero el problema es que después de la selección del botón de radio cuando se hace clic en el botón de comando, el otro grupo de paneles no se representa en absoluto cuando se carga la página por primera vez. cuando actualizo todo funciona bien. No pude entender por qué el valor de renderingPanelGroup no se establece en verdadero, incluso si se establece en la acción del comando. Aquí está mi código.

prueba.xhtml

    <h:form id="parentformid">
 <h:panelGroup id="demandDashBoardPanelGroupID">
    <fieldset> 
    <legend>Demand Dashboard</legend>

     <table>
        <tr>
        <td> 
            <h:selectOneRadio id="groupbyid" value="#{demandManagedBean.selectedRadioButton}" >  
                    <f:selectItem itemLabel="Group By Creation Date Time" itemValue="1" />  
                    <f:selectItem itemLabel="Group By Location" itemValue="2" />
            </h:selectOneRadio>
        </td>
        <td>
            <h:commandButton id="fetchbuttonID" value="Fetch" 
                     action="#{demandManagedBean.displayDemandRequestsTable}">
                          <f:ajax render=":parentformid:demandrequestpanelgrpid"execute="@form" /> 
            </h:commandButton>
        </td>
        </tr>
        </table>

     </fieldset>

     </h:panelGroup>
   //For checking demandManagedBean.renderedPanelGroup value. it is giving always false.Thats why panel group is not getting rendered.
   <h:outputText value="#{demandManagedBean.renderedPanelGroup}" />

    <h:panelGroup id="demandrequestpanelgrpid" rendered="#{demandManagedBean.renderedPanelGroup}"> 

     <fieldset id="demandrequestfieldsetid"> 

     <legend >Demand Requests</legend>

            <h:outputText rendered="#{demandManagedBean.renderFirstTable}" value="first table"/>

            <h:outputText rendered="#{demandManagedBean.renderSecondTable}" value="second table"/>

     </fieldset> 

   </h:panelGroup>

//Acción cmd del bean de respaldo

private String selectedRadioButton ="1";
private boolean renderFirstTable ;
private boolean renderSecondTable;
private boolean renderedPanelGroup ;

//getter and setter methods

public void displayDemandRequestsTable(){


        if(selectedRadioButton!= null && selectedRadioButton.endsWith("1")){

            renderFirstTable = true;
            renderSecondTable= false;

        }else if(selectedRadioButton!= null && selectedRadioButton.endsWith("2")){

            renderFirstTable = false;
            renderSecondTable= true;

        }
        renderedPanelGroup = true;
    }

preguntado el 22 de mayo de 12 a las 19:05

1 Respuestas

No puede actualizar los elementos que no están representados, renderizado = falso "es una forma JSF de" para eliminar elementos del árbol DOM,

no es como css display:none o visibilidad:hidden <- estos dos mantendrán los elementos en el árbol DOM pero ocultos, mientras que el JSF renderizado = falso ni siquiera renderizará (mantendrá) el elemento en el árbol DOM (ni siquiera lo verá en la "ver código fuente" de la página)

Entonces, en su caso, necesita envolver el panelGroup con otro 'panelGroup' y actualizar la identificación del envoltorio

<h:panelGroup id="demandrequestpanelgrpid">
    <h:panelGroup rendered="#{demandManagedBean.renderedPanelGroup}"> 

. . .

también mira una pregunta similar

¿Puedes actualizar un h:outputLabel desde ap:ajax listener?

contestado el 23 de mayo de 17 a las 13:05

De nada, en ese caso debe aceptar la respuesta... meta.stackexchange.com/a/5235 - Daniel

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.