Jsf 会话处理的托管Beans Lyfecycle问题
我是一个对MB JSF生命周期有问题的新手: 我得到了两个会话管理bean(MB),一个用于输入,另一个用于验证和数据库写入。 在ValidationData MB中,我注入InputData MB:Jsf 会话处理的托管Beans Lyfecycle问题,jsf,jakarta-ee,javabeans,managed,session-scope,Jsf,Jakarta Ee,Javabeans,Managed,Session Scope,我是一个对MB JSF生命周期有问题的新手: 我得到了两个会话管理bean(MB),一个用于输入,另一个用于验证和数据库写入。 在ValidationData MB中,我注入InputData MB: @ManagedBean(name = "validationData") @SessionScoped public class Validation implements Serializable { @ManagedProperty(value = "#{inputData}")
@ManagedBean(name = "validationData")
@SessionScoped
public class Validation implements Serializable {
@ManagedProperty(value = "#{inputData}")
private InputData inputData
...
在验证过程结束时,我通过以下方式终止InputData MBean:
HttpSession session = (HttpSession) FacesContext.getCurrentInstance().getExternalContext().getSession(true);
String sessionId = session.getId();
session.removeAttribute("inputData");
我的问题是,对于第二次验证,我显然仍然在validatioNData Bean中获取第一个inputData Bean的数据。(我看到了我的第一个inputData MBean的preDestroy指令,这是我的第一次验证)
有什么帮助吗
谢谢
GLO您不必从任何作用域中删除托管bean。从会话映射中删除bean与最终销毁bean并不相同(即使调用了@PreDestroy注释的方法),因此这可能是您面临旧值的原因。我建议实现一个不依赖于删除会话范围bean的解决方案。您可能希望将验证逻辑移动到不同的验证器,请参阅。