0

私は現在働いているこのコードを持っています:

<?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:clienteEditDialog" 
                        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:clienteEditDialog" 
                oncomplete="clienteEditDialog.show()" />

        </h:form>       

        <h:form id="formDialog">

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

                    <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}" />


            </p:dialog>

        </h:form>

    </ui:define>

</ui:composition>

ダイアログをモーダルにしたいので、modal=trueを my に追加します。

その結果、ダイアログがオーバーレイの「下」に表示されます。

少し検索した後、appendToBody=trueで問題が解決することがわかったので、試してみると、ダイアログが正しい方法で表示されます。

しかし... なんだ??! ダイアログ内のボタンが機能しなくなります!!

バグ?それとも解決策はありますか?

4

1 に答える 1

1

<h:form id="formDialog">ダイアログ内に移動

appendToBody=trueダイアログのコンテンツをページに追加して使用BODYする場合...そして、あなたの場合、それはの外側に取り出され、h:formご存知のように、コマンドボタンは機能h:formするために内に存在する必要があります....

このような

<p:dialog appendToBody="true".....
       <h:form id="formDialog">
           .....

路地で作業するときは、ダイアログの内側dialogsに配置することを忘れないでくださいh:forms...

于 2012-12-27T08:32:21.977 に答える