从对话框更新到组件primefaces

时间:2013-01-11 15:20:23

标签: ajax jsf-2 primefaces updates

如何从<p:dataTable id="dtCarg">

中的命令按钮更新<p:dialog>

我一直收到以下错误:

  

找不到“table_servidoresxdependencia”引用标识符“dtCarg”的组件

代码是:

<h:form id="formGestionServidores" prependId="false" style="font-size:10px;">
    <p:panel>
        <table id="tabla_objetivo_02">
            <tr>
                <td><p:fieldset id="tb_tabla_new" legend="Servidores" styleClass="ui-state-hover"
                        style="min-width:98%;height:100% ">

                        <p:dataTable id="dtCarg" var="cargo" value="#{mantePlazasController.listCargos}"
                            rowStyleClass="#{cargo.colorEstado}" emptyMessage="No existen plazas para la unidad seleccionada"
                            editable="true" style="font-weight: normal;overflow:auto;min-width:98%;">
                            <p:column headerText="Unidad">
                                <h:outputText value="#{cargo.serDescDep}"
                                    rendered="#{mantePlazasController.nivel!=2 and mantePlazasController.nivel!=3 and mantePlazasController.nivel!=4 and mantePlazasController.nivel!=5 and mantePlazasController.nivel!=6 and mantePlazasController.nivel!=7}" />
                                <h:outputText value="#{cargo.serDescDepNVL3}"
                                    rendered="#{mantePlazasController.nivel==2 or mantePlazasController.nivel==3 or mantePlazasController.nivel==4 or mantePlazasController.nivel==5 or mantePlazasController.nivel==6 or mantePlazasController.nivel==7}" />
                            </p:column>
                            <p:column headerText="Historial">
                                <center>
                                    <p:commandButton id="btnHistorial" icon="ui-icon-note" oncomplete="dlRegularizar.show()"
                                        title="Historial de Plaza" action="#{mantePlazasController.mostrarHistorial}">
                                        <f:setPropertyActionListener value="#{cargo}" target="#{mantePlazasController.cargoSelected}" />
                                    </p:commandButton>
                                    falta oncomplete falta actualizar
                                </center>
                            </p:column>
                        </p:dataTable>
                    </p:fieldset></td>
            </tr>
        </table>

        <p:dialog widgetVar="dlRegularizar" header="Regularizar Servidores" width="1210" modal="true">
            <p:dataTable id="table_servidoresxdependencia" var="servidorxdependencia"
                value="#{mantePlazasController.servidoresxdependencia}"
                emptyMessage="No existen trabajadores en el historial, para esa plaza"
                rowStyleClass="#{servidorxdependencia.color_his}">

                <p:ajax event="rowEdit" listener="#{mantePlazasController.onEditRowServidorxDependencia}"
                    update="tabla_objetivo_02:dtCarg,table_servidoresxdependencia,notificacionCalificacion,my_json_data" />

                <f:facet name="header">
                        Servidor-Dependencia HISTORIAL
                    </f:facet>
                <p:column headerText="Codigo">
                    <h:outputText value="#{servidorxdependencia.serCod}" />
                </p:column>
                <p:column headerText="Fecha de inicio">
                    <p:cellEditor>
                        <f:facet name="output">
                            <h:outputText value="#{servidorxdependencia.serFech_in_unmsm_str}" />
                        </f:facet>
                        <f:facet name="input">
                            <p:calendar value="#{servidorxdependencia.serFech_in_unmsm}" navigator="true" inputStyle="width:70px"
                                locale="es" pattern="dd/MM/yyyy" showButtonPanel="true" readOnlyInputText="true" showOn="button">
                            </p:calendar>
                        </f:facet>
                    </p:cellEditor>
                </p:column>
                <p:column headerText="Edit" style="width:20px">
                    <p:rowEditor />
                </p:column>
                <p:column headerText="Elim">
                    <center>
                        <p:commandButton id="HisEliSer" icon="ui-icon-trash" oncomplete="puenteEliSerHis(),linea_ocultar()"
                            title="Eliminar">
                            <f:setPropertyActionListener value="#{servidorxdependencia}" target="#{mantePlazasController.servidorHisElim}" />
                        </p:commandButton>
                    </center>
                </p:column>
            </p:dataTable>
        </p:dialog>
    </p:panel>
</h:form>

1 个答案:

答案 0 :(得分:3)

所以,基本上,你有一个

<h:form id="formGestionServidores" prependId="false" ...>
    <p:panel>
        <table id="tabla_objetivo_02">
            <tr>
                <td>
                    <p:fieldset id="tb_tabla_new" ...>
                        <p:dataTable id="dtCarg" ...>

并且您希望在更新中引用它,如下所示

<p:ajax ... update="tabla_objetivo_02:dtCarg" />

这确实无法奏效。 HTML <table>元素不代表JSF组件,因此在JSF组件树中不可用。对于初学者来说,找到正确的客户端ID的最简单方法是通过右键单击生成的HTML输出并在浏览器中查看查看源。找到<p:dataTable id="dtCarg">的HTML表示形式,并在更新中使用其id属性,前缀为:

根据到目前为止发布的视图标记,使用<h:form prependId="false">,生成的HTML表示应该只有id="dtCarg",因此您应该按如下方式引用它:

<p:ajax ... update=":dtCarg" />

另见: