我有一个表单,我有一个按钮,当我点击该按钮时,会打开一个对话框以选择一个值,然后关闭我的对话框。
但是,这样做我的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>
答案 0 :(得分:0)
您可能需要使用@SessionScoped,当您使用@ViewScoped并显示对话框时,您将丢失MB的实际实例。我今天遇到了同样的问题,我使用@PostConstruct注释的init方法解决(加载我的所有数据)并使用@SessionScoped进行注释以使用和管理从init()加载的数据。