在ajax渲染上删除了javax.faces.ViewState。 CommandLink在第二次点击时工作

时间:2013-07-11 17:26:21

标签: java ajax jsf

我知道jsf表单中的ajax渲染问题,所以我写了这样的代码(据说)避免了这个问题:

<h:panelGroup id="solicitudesPendientes" layout="block" styleClass="seccion">
            <h:panelGroup rendered="#{!gestionSociosControlador.haySolicitudesPendientes()}">
                No hay solicitudes pendientes de revisi&oacute;n
            </h:panelGroup>
            <h:form id="gestionSolicitudesPendientesForm" prependId="false">
                <h:dataTable id="solicitudesPendientesTbl" styleClass="dataTable" rendered="#{gestionSociosControlador.haySolicitudesPendientes()}"
                    value="#{gestionSociosControlador.getSolicitudesPendientes()}" var="solicitud">
                    <h:column>
                        #{solicitud.solicitante.nombre} #{solicitud.solicitante.apellidos}
                    </h:column>

                    <h:column>
                        <span class="imgLnkInline">
                        <h:commandLink id="botonAceptarSolicitudPertenenciaClub"
                                action="#{gestionSociosControlador.aceptarSolicitud(solicitud.id)}">
                                <h:graphicImage url="/resources/images/silkIcons/accept.png" /> Aceptar
                                <f:ajax execute="@this" render="@form :gestionSocios :gestionSociosForm" />
                            </h:commandLink>
                        </span>
                        <span class="imgLnkInline">
                        <h:commandLink id="botonRechazarSolicitudPertenenciaClub"
                                action="#{gestionSociosControlador.rechazarSolicitud(solicitud.id)}">
                                <h:graphicImage url="/resources/images/silkIcons/delete.png" /> Rechazar
                                <f:ajax execute="@this" render="@form :solicitudesPendientes" />
                            </h:commandLink>
                        </span>
                        <span class="imgLnkInline">
                            <h:commandLink id="botonAplazarSolicitudPertenenciaClub"
                                action="#{gestionSociosControlador.aplazarSolicitud(solicitud.id)}">
                                <h:graphicImage url="/resources/images/silkIcons/date_next.png" /> Decidir mas tarde
                                <f:ajax execute="@this" render="@form :solicitudesPendientes :gestionSolicitudesAplazadasForm" />
                            </h:commandLink>
                        </span>
                    </h:column>
                </h:dataTable>
                <h:messages id="gestionSolicitudesPendientesMsgs" for="gestionSolicitudesPendientesForm" layout="table"
                    errorClass="errorMessage"   infoClass="infoMessage" warnClass="warnMessage" />
            </h:form>

            <h:panelGroup rendered="#{gestionSociosControlador.haySolicitudesAplazadas()}">
                <span id="mostrarSolicitudesAplazadasLnk" class="imgLnkInline" onclick="mostrarSolicitudesAplazadas()" style="cursor:pointer">
                 <h:graphicImage url="/resources/images/silkIcons/bullet_toggle_plus.png" /> Ver #{gestionSociosControlador.getSolicitudesAplazadas().size()} solicitudes ocultas
                </span>

                <h:form id="gestionSolicitudesAplazadasForm" prependId="false">
                    <h:dataTable id="solicitudesAplazadasTbl" styleClass="dataTable" style="display:none"
                        value="#{gestionSociosControlador.getSolicitudesAplazadas()}" var="solicitud">
                        <h:column>
                            #{solicitud.solicitante.nombre} #{solicitud.solicitante.apellidos}
                        </h:column>

                        <h:column>
                            <span class="imgLnkInline">
                            <h:commandLink id="botonAceptarSolicitudPertenenciaClubAplazada"
                                    action="#{gestionSociosControlador.aceptarSolicitud(solicitud.id)}">
                                    <h:graphicImage url="/resources/images/silkIcons/accept.png" /> Aceptar
                                    <f:ajax execute="@this" render="@form :gestionSocios :gestionSociosForm :solicitudesPendientes :gestionSolicitudesAplazadasForm" />
                                </h:commandLink>
                            </span>
                            <span class="imgLnkInline">
                            <h:commandLink id="botonRechazarSolicitudPertenenciaClubAplazada"
                                    action="#{gestionSociosControlador.rechazarSolicitud(solicitud.id)}">
                                    <h:graphicImage url="/resources/images/silkIcons/delete.png" /> Rechazar
                                    <f:ajax execute="@this" render="@form :solicitudesPendientes :gestionSolicitudesAplazadasForm" />
                                </h:commandLink>
                            </span>
                        </h:column>
                    </h:dataTable>
                    <h:messages id="gestionSolicitudesAplazadasMsgs" for="gestionSolicitudesAplazadasForm" layout="table"
                        errorClass="errorMessage"   infoClass="infoMessage" warnClass="warnMessage" />
                </h:form>

                <span id="ocultarSolicitudesAplazadasLnk" class="imgLnkInline" onclick="ocultarSolicitudesAplazadas()" style="display:none">
                    <h:graphicImage url="/resources/images/silkIcons/bullet_toggle_minus.png" /> Ocultar solicitudes aplazadas
                </span>
            </h:panelGroup>
        </h:panelGroup>

        <div class="tituloSeccion"><h3>Miembros</h3></div>
        <h:panelGroup id="gestionSocios" layout="block" styleClass="seccion">
            <h:panelGroup rendered="#{!gestionSociosControlador.haySocios()}">
                El club no tiene socios.
            </h:panelGroup>
            <h:form id="gestionSociosForm" prependId="false">
                <h:dataTable id="sociosTbl" styleClass="dataTable" rendered="#{gestionSociosControlador.haySocios()}"
                    value="#{gestionSociosControlador.getSocios()}" var="socio">
                    <h:column>
                        #{socio.nombre} #{socio.apellidos}
                    </h:column>

                    <h:column>
                        <span class="imgLnkInline">
                            <h:commandLink id="botonExpulsarSocio" action="#{gestionSociosControlador.expulsarSocio(socio.id)}">
                                <h:graphicImage url="/resources/images/silkIcons/user_delete.png" /> Expulsar
                                <f:ajax execute="@this" render="@form :gestionSocios" />
                            </h:commandLink>
                        </span>
                    </h:column>
                </h:dataTable>
                <h:messages id="gestionSociosMsgs" for="gestionSociosForm" layout="table"
                    errorClass="errorMessage"   infoClass="infoMessage" warnClass="warnMessage" />
            </h:form>
        </h:panelGroup>

CommandLinks之间的所有点击顺序组合工作正常,除了一个。如果我首先点击CommandLink与id =“botonAplazarSolicitudPertenenciaClub”,然后我点击CommandLink与id =“botonAceptarSolicitudPertenenciaClubAplazada”(到目前为止它工作),最后我点击CommandLink与id =“botonExpulsarSocio”,最后一个动作仅适用于第二个单击,我注意到没有呈现javax.faces.ViewState(它是在页面加载时)。

奇怪的是,当我点击带有id =“botonAceptarSolicitudPertenenciaClub”的CommandLink,然后点击id =“botonExpulsarSocio”的CommandLink时,它可以正常工作。

我不确定这里发生了什么,因为我认为我编写了代码来避免这个特定的错误。

0 个答案:

没有答案