PrimeFaces对话框懒加载(动态=“真”)不工作?(PrimeFaces dialog laz

2019-09-03 01:57发布

我最近改变了我所有的bean从RequestScopedViewScoped 。 突然,对话的延迟加载不起作用。 我使用PrimeFaces JSF库。

<html>
<h:body>
<f:view>    
    <h:form>
        <p:commandButton id="addId" value="Add" title="Add" type="button" onclick="dlgMultiFileSelect.show();"/>
        ...
    </h:form>    
    <p:dialog header="Dialog" widgetVar="dlgMultiFileSelect" modal="true" resizable="true" dynamic="true"> 
        <ui:include src="/dialogs/media_browser.xhtml"/>
    </p:dialog>
</f:view>   
</h:body>
</html>

好像dynamic="true"不起作用,因为在支持bean media_browser.xhtml点击按钮时,将立即被初始化,并且没有。

难道我做错了什么?

使用PrimeFaces 3.5.0。

Answer 1:

已经发现了一些很简单的解决方法:

让我们引用在此的其他问题BalusC的回答是: 跳过执行<用户界面:包括>当父UI组件不会被渲染

所述<ui:include>运行为在视图生成时一taghandler,而所呈现的属性视图期间评估渲染时间。

关于他的第一个建议:

  1. 使用视图编译时间标签等<c:if>周围<ui:include>一部分。

因此,首先增加一些新的方法,以你的bean。 (甚至有可能在一些应用有用作用域重用豆)

public boolean isAjaxRequest() {
    boolean val = FacesContext.getCurrentInstance().getPartialViewContext().isAjaxRequest();
    return val;
}

然后附上<ui:include>内下<c:if>

<p:dialog id="yourDlg" header="Dialog" widgetVar="dlgMultiFileSelect" modal="true" resizable="true" dynamic="true"> 
    <c:if test="#{applicationBean.ajaxRequest}">
        <ui:include src="/dialogs/media_browser.xhtml"/>
    </c:if>
</p:dialog>

因此,在页面加载时间,请求不是阿贾克斯...并在基地页面上的其他Ajax请求,对话框将不会被更新。但是,如果你触发你的对话

<p:commandButton id="addId" value="Add" title="Add" type="button" 
    oncomplete="dlgMultiFileSelect.show();" update=":yourDlg"/>

和更新它的内容,它最终会被渲染!

请注意以下更改: 号码:对话ID, 电话号码:更新的commandButtonp:的commandButton的onComplete



Answer 2:

Facelet标记用户界面:包括将得到早些时候在循环处理,因此它得到初始化。 如果你想更新按钮,单击该对话框的内容,你需要做的所以使用您的commandButton更新=“对话框的ID”。 您可以使用您的用户界面:包括让页面不初始加载。



文章来源: PrimeFaces dialog lazy loading (dynamic=“true”) does not work?