Jsf 2 对话框关闭实例关联Bean视图范围

Jsf 2 对话框关闭实例关联Bean视图范围,jsf-2,primefaces,Jsf 2,Primefaces,我有一个表单,其中有一个按钮,当我点击该按钮时,一个对话框打开以选择一个值,然后我的对话框关闭 但是,执行此操作时,我的Bean(@ViewScoped)再次被调用(重新实例化),我丢失了以前在页面上输入的信息 我搜索了一下,发现了一个类似的行为(),但没有答案 我用构造函数初始化bean,但我不知道这是否是问题所在 @ManagedBean(name="exameBean") @ViewScoped public class ExameBean implements Serializable

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

但是,执行此操作时,我的Bean(@ViewScoped)再次被调用(重新实例化),我丢失了以前在页面上输入的信息

我搜索了一下,发现了一个类似的行为(),但没有答案

我用构造函数初始化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());

 }

}
@ManagedBean(name=“exameBean”)
@视域
公共类ExameBean实现了可序列化{
公共ExameBean(){
exame=新exame();
exames=newarraylist();
}
公共无效SelecionPaciente(){
RequestContext.getCurrentInstance().openDialog(“/pages/SelecionPaciente”);
}
公共图书馆(Paciente Paciente){
RequestContext.getCurrentInstance().closeDialog(paciente);
}
公共无效PacienteSelectionAdo(选择事件事件){
setPaciente((Paciente)event.getObject());
}
}
seleconapaciente.xhtml

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


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

如果重新启动视图范围,就会发生这种情况。如果您告诉JSF创建一个新视图,它将重新启动。例如,如果您从用于导航的操作方法返回字符串,则会发生这种情况。你这么做了吗?@BalusC我编辑了我的帖子,把我的页面放在了dialog return上,把我的bean方法放在了openDialog、CloseDialog和set值上。你怎么想?