从会话中获取会话范围的托管Bean时为空

时间:2018-10-30 12:02:59

标签: jsf

这是托管bean声明:

import javax.faces.bean.ManagedBean;
import javax.faces.bean.SessionScoped;
@ManagedBean(name = "user")
@SessionScoped
public class UserConsoleAction extends UserAction implements Serializable {

并且servlet中的以下代码返回null:

UserConsoleAction uca =  (UserConsoleAction) req.getSession().getAttribute("user");

这是用JSF 1编写的旧代码,现在正在使用JSF 2.2。 当在faces-config.xml中声明托管bean时,此方法运行良好并且能够从会话中获取会话范围的托管bean。

<managed-bean>
    <description>Used for user console functions</description>
    <managed-bean-name>user</managed-bean-name>
    <managed-bean-class>com.web.admin.UserConsoleAction</managed-bean-class>
    <managed-bean-scope>session</managed-bean-scope>
</managed-bean>

但是,当我删除了faces-config.xml条目并使用了ManagedBean注释时,从会话中获取托管bean实例的代码将返回null。 造成此更改的原因可能是因为它只是将声明部分从xml更改为注释。

ManagedBean注释在删除扩展UserAction时工作良好。 UserAction是一个请求范围的bean,而UserConsoleAction是会话范围的。

0 个答案:

没有答案