这是托管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是会话范围的。