gpt4 book ai didi

jsf - 与 p :dialog? 相比,PrimeFaces 对话框框架是否会破坏 View 范围

转载 作者:行者123 更新时间:2023-12-02 16:16:51 24 4
gpt4 key购买 nike

我正在使用 PrimeFaces 5。

我想在按下按钮时打开一个对话框。

<p:commandButton value="add upload" actionListener="#{theForm.openUpload}" >

public void openUpload() {
this.item = new Item();
RequestContext.getCurrentInstance().openDialog("uploadForm");
}

对话框中将有一个保存按钮来保存输入。

<h:commandButton value="#{text['button.add']}" id="add" styleClass="btn btn-default" actionListener="#{theForm.confirmAdd}"/>

public void confirmAdd() {
RequestContext.getCurrentInstance().closeDialog("uploadForm");
}

我的托管 bean 是@ViewScoped。如果对话框位于外部文件中(如 PrimeFaces 对话框框架所做的那样),命令按钮是否会破坏 View 范围?每当我单击“添加上传”按钮时,@PostConstruct 方法就会再次调用,就像范围丢失一样。

official blog的评论部分说它不会破坏 View 范围,但是 here the forum a core developeropenDialog() 创建了一个新 View ,因此它破坏了 View 范围。

有人可以证实这一点吗?

最佳答案

PrimeFaces 的对话框框架基本上显示了 <iframe> 中的另一个 View 。标签。我不会称之为破坏 View 范围,但对话框 View 将有它自己的范围,因为它实际上是一个不同的页面。在不同的情况下这可能是可取的,也可能不是可取的。正如 PrimeFaces 的用户指南所述:

Dialog Framework (DF) is used to open an external xhtml page in adialog that is generated dynamically on runtime.

p:对话框

  • 存在于同一 View 范围内。
  • 可以轻松拥有相同的对话上下文。
  • 静态定义的对话框及其组件在 View 构建时立即创建。您只能延迟渲染,例如与 dynamic=true .
  • 声明性定义意味着它更具可读性和可维护性,因为对话框的存在没有隐藏在 Java 代码中的某个地方。

对话框框架

  • 有自己的 View 范围。
  • 开发人员必须担心传递参数、传播对话上下文。 (PF 直到 5.1 才支持 includeViewParams。)
  • 动态创建意味着在对话框实际打开之前不会创建对话框及其组件,但每次打开时都会创建一个新对话框。如果多次打开对话框,总体性能影响会更大,而且许多对话框 View 可能会耗尽 JSF View 限制并使其他 View 过期。
  • 命令式动态创建在某些情况下可以提高资源效率。例如。根据用户输入显示数十个对话框中的一个特定对话框。或者很少使用的对话框,可以从应用程序的任何页面打开。

我的建议是默认使用 p:dialog。仅在像我在最后一个要点中提到的情况下才使用对话框框架。

关于jsf - 与 p :dialog? 相比,PrimeFaces 对话框框架是否会破坏 View 范围,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26492247/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com