p:即使没有显示对话框,也会在动态p:对话框中处理dataTable

时间:2018-05-24 15:40:22

标签: primefaces jsf-2

我有一个动态对话框

<p:dialog
        dynamic="true"
        closeOnEscape="true"
        id="modalID"
        modal="true"
        >
    <p:outputPanel rendered="#{empty testBean.someArrayList}">
        empty
    </p:outputPanel>

</p:dialog>

当我在页面上包含此对话框时,testBean未初始化 - 很好,这就是我想要的。它仅在我显示对话框时初始化。

但是当我在对话框中包含一个p:dataTable时:

<p:dialog
dynamic="true"
closeOnEscape="true"
id="modalID"
modal="true"
>
<p:outputPanel>
    <p:dataTable rendered="#{not empty testBean.someArrayList}" value="#{testBean.someArrayList}" var="item">
        <p:column>
            #{item}
        </p:column>
    </p:dataTable>
 </p:outputPanel>

</p:dialog>

正在初始化testBean,并在辅助bean上调用testBean.getSomeArrayList()。 我已经读过ui:includes(参见Launching dialogs using PrimeFaces via <p:dialog> and <ui:include>)的情况,但是为什么p:dataTable的情况呢?顺便说一句。在p:dataTable周围放置渲染也没有解决问题。

我有什么选择不立即初始化testBean? 我可以使用c:if但是根据我的经验,当你混合使用JSTL和JSF时,你会得到奇怪的结果。我通常只使用它来排除不会呈现的内容(即使在一些ajax请求之后)。当我之前使用ajax时,它确实有效,但可能会导致意外问题。

我能看到的另一个选择是使用ui:include with dynamic src例如

<p:dialog
dynamic="true"
closeOnEscape="true"
id="modalID"
modal="true"
>
<p:outputPanel id="updateMeWhenOpeningModal">
    <ui:insert src="#{dialogManager.testBeanSrc}"/>
</p:outputPanel>

</p:dialog>

然后将testBeanSrc从路径更改为空文件到包含p:dataTable的文件。

还有其他解决方案吗?哪一个副作用最小?

0 个答案:

没有答案