【问题标题】:Primefaces Dialog is not displayed for the second timePrimefaces Dialog第二次不显示
【发布时间】:2011-06-15 07:16:45
【问题描述】:

我正在使用 Primefaces。我的功能是使用 primefaces 内联编辑在数据表中显示记录。这里我们有一个“添加”按钮,它显示一个对话框以输入新记录。输入值后单击“保存”按钮,插入记录并用记录更新数据表。 我的问题是,当我第二次单击“添加”按钮时,对话框没有打开。这是我的代码。

        <h:form id="myForm" prependId="false">
    <p:dataTable  var="client" id="clientTable" value="#{clientView.clientModelList}" paginatorPosition="top"  paginator="true" rows="10"  
             paginatorTemplate="{CurrentPageReport}  {FirstPageLink} {PreviousPageLink} {PageLinks} {NextPageLink} {LastPageLink} {RowsPerPageDropdown}"  
             rowsPerPageTemplate="10,20,25" rowEditListener="#{clientView.rowEditListener}" onRowEditUpdate="growl" >

            <p:column style="width:60px;">              
            <p:rowEditor/> 
            <h:commandButton  style="padding-left:5px;" image="/resources/images/delete.jpeg" styleClass="spa"  value="delete" immediate="true" actionListener="#{clientView.delete}" >
                <f:attribute name="username" value="#{client}" />
            </h:commandButton>

            </p:column>

            <p:column>

                    <f:facet name="header">
                        <h:outputText value="#{myLoginBean.multilangMap['everis.client.idCliente']}" />
                    </f:facet>
                    <p:cellEditor>
                        <f:facet name="output">
                            <h:outputText value="#{client.codCliente}" />
                        </f:facet>
                        <f:facet name="input">
                            <h:inputText required="true" requiredMessage="#{msg.idClienteEmpty}" maxlength="80"  value="#{client.codCliente}" />
                        </f:facet>
                    </p:cellEditor>
            </p:column>

            <p:column>

                <f:facet name="header">
                    <h:outputText value="#{myLoginBean.multilangMap['everis.client.desCliente']}" />
                </f:facet>

                <p:cellEditor>

                    <f:facet name="output">
                        <h:outputText value="#{client.desCliente}" />
                    </f:facet>
                    <f:facet name="input">
                        <h:inputText required="true" requiredMessage="#{msg.desClienteEmpty}" maxlength="255"  value="#{client.desCliente}" />
                    </f:facet>

                </p:cellEditor>
            </p:column>


    </p:dataTable>
        </div>
        <div class="divButPosition">

        <h:panelGroup id="buttonPanel">

            <p:commandButton id="buttons" value="Add" actionListener="#{clientView.addEmptyClient}"
            async="true" update="buttonPanel,dlgForm:table"  rendered="#{!clientView.addNewRow}" oncomplete="alert('complete');clientDialog.show();" />

        </h:panelGroup>

    </div>
    </h:form>   
    <p:growl id="growl" showDetail="false" />  
<p:dialog id="clientDialog"  header="Client Detail"  widgetVar="clientDialog" resizable="false" width="500" showEffect="explode" hideEffect="explode" modal="false" closable="false">
    <h:form id="dlgForm" > 

<h:dataTable var="newclient" id="table" value="#{clientView.newClient}">
    <h:column>
        <f:facet name="header">
            <h:outputText value="#{myLoginBean.multilangMap['everis.client.idCliente']}" />
        </f:facet>
        <h:inputText value="#{newclient.codCliente}" required="true" requiredMessage="#{msg.idClienteEmpty}"  maxlength="80"/>
    </h:column>
    <h:column>
        <f:facet name="header">
            <h:outputText value="#{myLoginBean.multilangMap['everis.client.desCliente']}" />
        </f:facet>
        <h:inputText value="#{newclient.desCliente}" required="true" requiredMessage="#{msg.desClienteEmpty}"   maxlength="255"/>
    </h:column>
</h:dataTable> 
<p:commandButton value="everis.save"  actionListener="#{clientView.saveClient}" async="true" update="growl,buttonPanel,clientTable" oncomplete="handleRequest(args ,document.getElementById('clientDialog'))" />
<p:commandButton value="#{myLoginBean.multilangMap['everis.cancel']}" immediate="true" update="buttonPanel,table" async="true"  actionListener="#{clientView.cancelClient}" oncomplete="clientDialog.hide();" />
    </h:form>  
</p:dialog> 

非常感谢每一个人。

【问题讨论】:

    标签: jsf dialog primefaces


    【解决方案1】:

    如果我错了,现在纠正我,但如果你点击对话框上的保存,你永远不会关闭它?我不知道它是否会有所帮助,但您至少可以尝试

    【讨论】:

    • 这对 Rafael 很有帮助。我们不是关闭对话框,而是使用 js 使对话框隐藏。当我们使用 dialogName.hide();它工作正常。我们面临另一个问题,对话框现在第一次没有显示。从数据表中删除记录后,我的意思是页面重新加载,然后单击“添加”后显示对话框。
    • 第一次加载页面时,检查是否真的可以在源代码中的某处看到对话框。 Primefaces 可能会在对话框中出现很多错误,您需要遵循一些不成文的规则。就像永远不要将它们粘贴在表单中一样,不要更新对话框而是更新其中的内容。不要在渲染中粘贴对话框......我总是将我的对话框放在最上面,所以我确定它们不依赖任何东西,而且我知道它们是首先加载的。
    • 是的,Rafael,有很多问题。但是我遇到了其他问题。如果我在对话框中输入了一些值并单击对话框中的“取消”按钮将关闭灯箱中的取消按钮的 actionListener 我将对象设置为 null。但是当我单击“添加”按钮时,旧值再次显示。是否有任何东西可以刷新对话框中的数据。
    • 哈!有趣的东西,我使用 primefaces 内联编辑器来更改表​​中的电子邮件值,当我单击它并将其忽略时,它 sais 不能为 null 将旧值放回原处,就是这样......当我添加类似 lalala 的东西时我收到一个 rexeg 错误说:如果我单击取消,这不是一封电子邮件,它只会添加 lalala 而不是旧值。我在 primefaces 论坛上写了一些东西,询问这是否是一个错误,但他们从来没有 awnsered :primefaces.prime.com.tr/forum/viewtopic.php?f=3&t=11523
    • 我猜你会在显示之前将 bean 值设置为 null 并刷新对话框中的表单
    猜你喜欢
    • 2020-12-31
    • 1970-01-01
    • 2023-02-26
    • 1970-01-01
    • 2015-02-02
    • 1970-01-01
    • 2016-01-03
    • 2017-08-10
    • 1970-01-01
    相关资源
    最近更新 更多