数据表作为主数据,对话框作为详细信息

时间:2012-12-26 12:36:07

标签: 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"
   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:'undefined'不是一个函数(评估   'clienteEditDialog.show()')

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

2 个答案:

答案 0 :(得分:1)

您正在从不同的命名容器引用clienteEditDialogTable。实际身份证是 :formDialog:clienteEditDialogTable,所以试试吧。 ID可以不同,但​​在您提供模板源代码后我可以告诉您更多信息。

答案 1 :(得分:1)

在较旧的primefaces版本中,我们无法为widgetVar

idp:dialog分配相同的名称

尝试将id="clienteEditDialog"更改为id="clienteEditDialogId"