【问题标题】:Dialog close instanciate Bean ViewScoped对话框关闭实例化 Bean ViewScoped
【发布时间】:2014-09-02 13:10:00
【问题描述】:

我有一个表单,其中有一个按钮,当我单击该按钮时,会打开一个对话框以选择一个值,然后我的对话框关闭。

但是,这样做我的 Bean (@ViewScoped) 被再次调用(重新实例化),我丢失了之前在页面上输入的信息。

我搜索并发现了类似的行为 (http://forum.primefaces.org/viewtopic.php?f=3&t=38235) 但没有答案。

我用构造函数初始化了我的 bean,但我不知道这是否是问题。

@ManagedBean(name="exameBean")
@ViewScoped
public class ExameBean implements Serializable {

public ExameBean(){
    exame = new Exame();
    exames = new ArrayList<Exame>();
    }

public void selecionaPaciente() {
    RequestContext.getCurrentInstance().openDialog("/pages/SelecionaPaciente");
}

 public void retornaPaciente(Paciente paciente) {
    RequestContext.getCurrentInstance().closeDialog(paciente);
}

 public void pacienteSelecionado(SelectEvent event) {
        exame.setPaciente((Paciente) event.getObject());

 }

}

SelecionaPaciente.xhtml

  <p:column headerText="Selecionar">
                    <p:commandButton icon="ui-icon-search" actionListener="#{exameBean.retornaPaciente(lista)}" />
                </p:column>

【问题讨论】:

  • 如果您重新启动视图范围,就会发生这种情况。如果您告诉 JSF 创建一个新视图,它将重新启动。如果你会发生这种情况。从操作方法返回一个字符串以进行导航。你这样做了吗?
  • @BalusC 我编辑了我的帖子以放置代表对话框返回的页面以及我的 openDialog、CloseDialog 和设置值的 bean 方法。你怎么看?

标签: jsf-2 primefaces


【解决方案1】:

您可能需要使用@SessionScoped,当您使用@ViewScoped 并显示对话框时,您会丢失MB 的实际实例。我今天遇到了同样的问题,我使用带有 @PostConstruct 注释的 init 方法(加载我的所有数据)并使用 @SessionScoped 注释来使用和管理从 init() 加载的数据。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-09-17
    • 1970-01-01
    • 1970-01-01
    • 2013-11-20
    • 1970-01-01
    • 2013-12-30
    • 1970-01-01
    相关资源
    最近更新 更多