对话框关闭instanciate Bean ViewScoped

时间:2014-09-02 13:10:00

标签: jsf-2 primefaces

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

但是,这样做我的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>

1 个答案:

答案 0 :(得分:0)

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