打开对话框时,不会更新数据表选择

时间:2013-11-13 22:51:10

标签: jsf primefaces datatable dialog selection

我有一个问题。我有一个表单和一个内部另一个表单的对话框。第二种形式有一个带有radiobutton选择的数据表。当我第一次打开对话框时,选择显示正常。我关闭了对话框。但是当我尝试使用另一个元素时,数据表上的选择不会更新。

我使用的配置是:

Mojarra 2.2.4
Primefaces 4.0

但是,如果我使用Primefaces 3.5版本,它可以工作。

我附上了xhtml文件。

第一个文件                           

        <h:form id="formPlanificarCursos">
            <p:outputPanel styleClass="pnlDeclaracionMessages">
                <p:messages showSummary="true" />
            </p:outputPanel>

            <p:panel id="pnlPlanHorarioCurso" styleClass="pnlPlanHorarioCurso non-borders">
                <components:titleSeparator title="Horarios de Curso" />
                <!-- Toolbar -->
                <p:outputPanel layout="block" styleClass="toolbar">
                    <p:commandLink id="btnAgregar" update="@(.dlgHorarioCurso)"
                        oncomplete="jQuery('.dlgHorarioCurso .ui-dialog-title').text('#{plan_msgs['planCurso.registrar.titulo']}'); dlgHorarioCurso.show();">
                        <h:graphicImage value="/resources/images/document_add.png" />
                    </p:commandLink>
                    <p:tooltip for="btnAgregar" value="Agregar Horario" />
                </p:outputPanel>
                <p:schedule id="scheduleCurso" minTime="6" value="#{detallePlanCursoBean.scheduleModel}" styleClass="scheduleCurso schedule-without-days"
                    allDaySlot="false" showHeader="false" view="agendaWeek" axisFormat="HH:mm" timeFormat="H:mm{ - H:mm}" aspectRatio="4" locale="es"
                    widgetVar="scheduleCurso">
                    <p:ajax event="eventSelect" listener="#{detallePlanCursoBean.onEventSelect}" update="@(.dlgHorarioCurso)"
                        oncomplete="jQuery('.dlgHorarioCurso .ui-dialog-title').text('#{plan_msgs['horarioCurso.modificar.titulo']}'); dlgHorarioCurso.show();" />
                </p:schedule>
                <f:facet name="footer">
                    <div class="div-botonera">
                        <p:commandButton id="btnAceptar" value="Aceptar" action="#{detallePlanCursoBean.registrarDetallePlanCurso}" />
                        <p:commandButton id="btnCancelar" value="Cancelar" action="#{detallePlanCursoBean.irConsultarPlanCurso}" immediate="true" />
                    </div>
                </f:facet>
            </p:panel>
        </h:form>
        <!-- Agregar Disponibilidad Horaria -->
        <p:dialog widgetVar="dlgHorarioCurso" styleClass="dlgHorarioCurso" modal="true" resizable="false" closable="false">
            <p:ajax event="close" listener="#{detallePlanCursoBean.cancelarHorarioCurso}" />
            <ui:include src="/planificacion/horarioCurso.xhtml" />
        </p:dialog>

第二档

<ui:composition xmlns="http://www.w3.org/1999/xhtml" xmlns:h="http://java.sun.com/jsf/html" xmlns:f="http://java.sun.com/jsf/core"
xmlns:ui="http://java.sun.com/jsf/facelets" xmlns:p="http://primefaces.org/ui" xmlns:o="http://omnifaces.org/ui"
xmlns:components="http://java.sun.com/jsf/composite/components">
<h:form id="frmHorarioCurso">
    <p:panel styleClass="pnlHorarioCurso non-borders">
        <p:messages id="messagesfrmHorarioCurso" />

        <components:titleSeparator title="Aula" />

        <p:outputPanel id="pnlAulas" styleClass="pnlAulas" style="border-width:0px;">
            <p:dataTable emptyMessage="No hay aulas para seleccionar." var="aula" id="grdAulas" styleClass="grdAulas"
                value="#{detallePlanCursoBean.aulaModel}" selection="#{detallePlanCursoBean.detallePlanCursoDTO.aula}" rows="3" paginator="true"
                paginatorTemplate="{CurrentPageReport} {FirstPageLink} {PreviousPageLink} {PageLinks} {NextPageLink} {LastPageLink}"
                currentPageReportTemplate="({currentPage} de {totalPages})" paginatorPosition="bottom" paginatorAlwaysVisible="false" widgetVar="grdAulas">
                <p:column selectionMode="single" style="width:15px;" />
                <p:column headerText="Nombre">
                    <h:outputText value="#{aula.nombre}" />
                </p:column>
                <p:column headerText="Ubicación">
                    <h:outputText value="#{aula.locacion.nombre}" />
                </p:column>
                <p:column headerText="Capacidad" style="text-align:center;width:100px;">
                    <h:outputText value="#{aula.capacidad}" />
                </p:column>
                <p:column headerText="Accesibilidad" style="width:10%; text-align:center;">
                    <p:selectBooleanCheckbox value="#{aula.accesible}" disabled="true" />
                </p:column>
            </p:dataTable>
        </p:outputPanel>

        <f:facet name="footer">
            <div class="div-botonera">
                <p:commandButton value="Aceptar" action="#{detallePlanCursoBean.agregarHorarioCurso}" update="@(.pnlHorarioCurso)"
                    oncomplete="if(!args.validationFailed) HorarioCurso.handleComplete(xhr, status, args);" />

                <p:commandButton value="Cancelar" oncomplete="scheduleCurso.update(); dlgHorarioCurso.hide();" update="@(.pnlHorarioCurso)" immediate="true"
                    action="#{detallePlanCursoBean.cancelarHorarioCurso}" />
            </div>
        </f:facet>

    </p:panel>
</h:form>

感谢您的帮助。

1 个答案:

答案 0 :(得分:0)

我遇到了类似的问题。我有一个对话框正在打开,其中包含基于预先选择的dataTable行的信息,但该对话框的内容在第一次打开后没有更新。 我通过将属性"process=@form"添加到我的commandLink来解决了我的问题,在我看来,我认为update属性应该是update=":dlgHorarioCurso"