在执行userFacade.create(user)
时,我可以看到用户是在数据库中创建的,但在重新启动应用程序之前我无法使用该用户登录
或者如果我取消验证该会话(它在sessionScoped中)
其他例子:如果我创建一个Cv并将其添加到用户CV,即使它在数据库中,我也无法获得使用user.getListCvs()
创建的最后一个cv,但如果我重新启动服务器,我可以看到它
这是创建当前用户的简历的bean
public class CreerCV implements Serializable{
@EJB
private CvFacade cvFacade;
@EJB
CandidatFacade candidatFacade;
private Cv cv;
private Candidat candidat;
@PostConstruct
public void init(){
cv=new Cv();
HttpSession session = (HttpSession) FacesContext.getCurrentInstance().getExternalContext().getSession(false);
candidat=(Candidat)session.getAttribute("membre");
candidat=candidatFacade.find(candidat.getId()); //so i can not get the listCVs of the my saved attribute in my session , but the listCVs of a user in the database ! This is the problem
}
//+getters and setters
public String creerCV(){
if(candidat!=null){
cv.setCandidat(candidat);
candidat.getListeCv().add(cv);
try{
cvFacade.create(cv);
FacesContext.getCurrentInstance().addMessage(null, new FacesMessage("Création du cv avec succés"));
}catch(Exception e) {
System.out.println(e);
}
}
else
FacesContext.getCurrentInstance().addMessage(null, new FacesMessage(FacesMessage.SEVERITY_ERROR, "Une erreur s'est produite",""));
return "/index.xhtml";
}
这是显示当前用户的CV的bean
@Named
@RequestScoped
public class ListeCvs implements Serializable{
@EJB
private CvFacade cvFacade;
private List<Cv> listeCvs=new ArrayList<>();
private Cv selectedCv;
private Candidat candidat;
@PostConstruct
public void init(){
HttpSession session = (HttpSession) FacesContext.getCurrentInstance().getExternalContext().getSession(false);
candidat=(Candidat)session.getAttribute("membre");
System.out.println(candidat.getListeCv());
if(candidat!=null)
listeCvs=candidat.getListeCv();
candidat=candidatFacade.find(candidat.getId());
}
//getters+setters ect..
例如:
我创建一个简历,我刷新我无法看到表中创建的简历! 我去数据库,我可以看到它已创建 我重启我的应用程序,我去我的桌子,我可以在表格中看到我的简历
我创建了第二个cv,我在表中看不到它,但是我可以看到我创建的前一个,我看到它是在数据库上创建的,我重启我的应用程序转到我的表我能看到我的2个简历就在那里!
PS :对于测试,我使用System.out.print
和一些dataTables
来查看列表
答案 0 :(得分:1)
你如何保存简历?他们是由两个不同的实体经理保存和审核的吗?
如果有,请查看thread关于第一级缓存和刷新的信息。
如何处理交易?如果你创建一个,你还记得提交和刷新吗?
编辑:
因此,当您使用查找功能时,您会收到类型为 Candidat 的完全不同的对象,并且当您运行此部分时:
cv.setCandidat(candidat);
candidat.getListeCv().add(cv);
它适用于不同的'候选人'对象,因为这一行:
candidat=candidatFacade.find(candidat.getId());
如果您想在Candidat对象中保留每个组件的最新数据,只需在您从会话传递的 THIS 确切对象上进行编辑。使用find函数时,您会收到新对象,并且每个组件都有过时的数据。 尝试从组件中删除此查找。
<强> EDIT2:强>
就是这样。您从会话中检索候选人,可以将其称为 A 。 您可以在CreerCV和ListeCV中检索它。是的,它是同一个对象。
然后您在CreerCV中使用find并接收类Candidate的不同实例。我们称之为 B 。
那么你在ListeCV中使用find并接收类Candidate的不同实例。我们称之为 C 。
好了,现在对象B和C具有相同的DATA,但它们是java的不同对象。
您在对象B中添加要列出的内容,并希望在对象C的列表中看到此更改。