模态对话框BUG

时间:2012-12-27 08:27:47

标签: jsf jsf-2 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: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 添加到我的。

结果是我的对话框出现在叠加层下面。

经过一番搜索后,我发现 appendToBody = true 可以解决我的问题,所以我尝试了,我的对话框出现了正确的方式。

但是...... WTF ??!对话框内的按钮停止工作!

BUG?或者有任何解决方案吗?

1 个答案:

答案 0 :(得分:1)

在对话框

中移动<h:form id="formDialog">

因为当您使用appendToBody=true对话框的内容被追加到您网页的BODY时...在您的情况下,它会被带到h:form之外,如您所知commandButtons必须位于h:form内才能工作....

喜欢这个

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

使用dialogs allays时,请记住将h:forms放入对话框中...