1

我想知道应该使用哪种方法来更新 Primefaces 中的对话框。这两个实现是等价的吗?

第一种方法:在对话框中使用动态属性

<h:form>
    <p:commandButton onclick="dialog.show();"/>
</h:form>

<p:dialog widgetVar="dialog" dynamic="true">
    <h:form id="dialogForm">
        <h:outputText value="#{bean.name}"/>
    </h:form> 
</p:dialog>

第二种方法:通过 commandButton 手动更新对话框

<h:form>
    <p:commandButton onclick="dialog.show();" update="dialogForm"/>
</h:form>

<p:dialog id="dialog" widgetVar="dialog">
    <h:form id="dialogForm">
        <h:outputText value="#{bean.name}"/>
    </h:form>
</p:dialog>

我什么时候应该使用哪种方法?

4

2 回答 2

1

如果对话框根本没有加载,则两种方法的结果相同。第一种方法尝试弹出对话框,但发现内容尚未加载。因此,将从相应的 bean 中获取内容。第二种方法在从 bean 加载内容后打开对话框。

至少在打开对话框一次后出现差异:如果您打开对话框第二次,第三次,第四次,...第n次,第一种方法只会让对话框弹出,因为内容已经加载第一次。第二种方法将确保在对话框打开时内容始终是最新的。

于 2013-08-08T16:17:55.803 回答
0

来自 VDL——

动态模式允许对话框在显示之前而不是在页面加载时获取它的内容,这对于减少初始页面加载时间很有用。默认为假。

似乎第二个选项会在页面加载时获取其内容,然后在点击时更新它。为相同的结果做两倍的工作。

于 2013-08-08T15:54:28.933 回答