Primefaces Datatable作为主控,对话框作为详细信息

Primefaces Datatable作为主控,对话框作为详细信息,primefaces,Primefaces,我正在努力让代码正常工作: <?xml version="1.0" encoding="UTF-8"?> <ui:composition xmlns="http://www.w3.org/1999/xhtml" xmlns:ui="http://java.sun.com/jsf/facelets" xmlns:f="http://java.sun.com/jsf/core" xmlns:h="http://java.sun.com/jsf/html" x

我正在努力让代码正常工作:

<?xml version="1.0" encoding="UTF-8"?>
<ui:composition xmlns="http://www.w3.org/1999/xhtml"
   xmlns:ui="http://java.sun.com/jsf/facelets"
   xmlns:f="http://java.sun.com/jsf/core"
   xmlns:h="http://java.sun.com/jsf/html"
   xmlns:p="http://primefaces.org/ui"
   template="/templates/default.xhtml">

    <ui:define name="content">

        <h:form id="form">    

            <p:dataTable id="clienti" var="c" value="#{clientiController.clienti}" rowKey="#{c.id}">

                <p:column headerText="Ragione sociale">
                    <h:outputText value="#{c.ragioneSociale}" />
                </p:column>
                <p:column headerText="Codice fiscale">
                    <h:outputText value="#{c.codiceFiscale}" />
                </p:column>

                <p:column style="width:4%">
                    <p:commandButton 
                        update=":formDialog:clienteEditDialogTable" 
                        oncomplete="clienteEditDialog.show()" 
                        value="Modifica"
                        title="Modifica">
                            <f:setPropertyActionListener value="#{c}" target="#{clientiController.clienteSelezionato}" />
                    </p:commandButton>
                </p:column>

            </p:dataTable>        

            <p:commandButton value="Aggiorna" actionListener="#{clientiController.aggiorna}" update=":form:clienti" icon="ui-icon-arrowrefresh-1-n" />
            <p:commandButton value="Nuovo Cliente" actionListener="#{clientiController.nuovo}" update=":formDialog:clienteEditDialogTable" oncomplete="clienteEditDialog.show()" />

        </h:form>   

            <p:dialog 
                header="Modifica Cliente" 
                widgetVar="clienteEditDialog" 
                id="clienteEditDialog"
                showEffect="fade" 
                hideEffect="explode" 
                closable="true"
                modal="true"
                appendToBody="true">

                    <h:form id="formDialog">        

                    <h:panelGrid id="clienteEditDialogTable" columns="2" cellpadding="10" style="margin:0 auto;">

                        <p:outputLabel for="fieldNome" value="Ragione Sociale:" />
                        <p:inputText id="fieldNome" value="#{clientiController.clienteSelezionato.ragioneSociale}" />

                        <p:outputLabel for="fieldCodice" value="Codice:" />
                        <p:inputText id="fieldCodice" value="#{clientiController.clienteSelezionato.codiceFiscale}" required="true" requiredMessage="Codice fiscale obbligatorio" />


                    </h:panelGrid>

                    <p:commandButton 
                        value="Conferma modifiche" 
                        actionListener="#{clientiController.modifica}" 
                        update=":form:clienti" 
                        oncomplete="clienteEditDialog.hide()"
                        rendered="#{clientiController.clienteSelezionato.id!=null}" />

                    <p:commandButton 
                        value="Conferma nuovo cliente" 
                        actionListener="#{clientiController.crea}" 
                        update=":form:clienti" 
                        oncomplete="clienteEditDialog.hide()"
                        rendered="#{clientiController.clienteSelezionato.id==null}" />

                    </h:form>

            </p:dialog>

    </ui:define>

</ui:composition>

通过单击“Nuovo Cliente”,我得到一个javascript控制台错误:

TypeError:“未定义”不是函数(正在计算 “clienteEditDialog.show()”)

这当然是对命名容器的误解。
您能帮我提供正确的ID吗?

您正在从不同的命名容器引用ClientEditDialogTable。实际id为
:formDialog:ClientEditDialogTable,请尝试使用它。Id可以不同,但在您提供模板源代码后,我可以告诉您更多信息。

在较旧的primefaces版本中,无法为
widgetVar
Id
分配相同名称的
p:dialog


请尝试将
id=“clienteditdialog”
更改为
id=“clienteditdialogid”

谢谢,我用我的代码编辑了这个问题,你现在能帮我吗?