为什么关闭p:对话框正在重新加载页面

时间:2014-11-21 10:01:00

标签: jsf primefaces

<p:dialog header="#{bundle['ref.details']}" id="detailsDial"
                    widgetVar="detailsDialog" style="max-width:800px">
                    <p:button value="#{bundle['close']}"
                        onclick="PF('detailsDialog').hide()" />
                </p:dialog>

对话框周围没有其他形式,对话框内没有表格。这是我想念的东西,但是什么。我不知道要提供哪些其他信息,因为我们真的不明白p:button如何重新加载仅客户端的页面?没有包含javascript。此外,firebug控制台中也没有错误消息。我在外面使用这样的模板:

<!DOCTYPE html>
<html lang="en" 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">
<h:body>
<ui:composition template="/maintemplate.xhtml">
<ui:define name="content">
<p:dialog ....

1 个答案:

答案 0 :(得分:0)

p:button移动到p:commandButton命令按钮默认情况下使用部分请求

            <p:dialog header="#{bundle['ref.details']}" id="detailsDial"
                widgetVar="detailsDialog" style="max-width:800px">
                  <p:commandButton value="#{bundle['close']}" onclick="PF('detailsDialog').hide();" type="button" />
            </p:dialog> 

为了理解差异,只要看到HTML在一个或另一个案例中呈现就足够了,所以对于

<p:button value="Close" onclick="PF('detailsDialog').hide()" />

呈现的HTML是

<button type="button" onclick="PF('detailsDialog').hide();window.open('/ui/button.jsf','_self')" >
  <span class="ui-button-text ui-c">Close</span>
</button>

按钮执行GET请求,请注意window.open('/ui/button.jsf','_self')

代表<p:commandButton value="Close" onclick="PF('detailsDialog').hide()" />

呈现的HTML是

<button onclick="PF('detailsDialog').hide();PrimeFaces.ab({s:'j_idt19'});return false;" type="submit">
  <span class="ui-button-text ui-c">CloseCommandButton</span>
</button>

注意PrimeFaces.ab({s:'j_idt19'});return false;,因此它会发送partialUpdate而不是提交封闭表单