【问题标题】:request scoped property in session scoped JSF bean在会话范围的 JSF bean 中请求范围属性
【发布时间】:2011-09-02 10:49:54
【问题描述】:

我想要一个会话范围的 JSF bean,它具有一个请求(页面)范围的属性。有可能吗?

【问题讨论】:

    标签: jsf session-scope


    【解决方案1】:

    不,这是不可能的。托管属性注入在创建 bean 期间发生。但是,当创建会话范围 bean 时,不一定存在请求,并且注入的请求范围 bean 在会话剩余部分的后续请求中将无效。

    反过来做。例如

    @ManagedBean
    @SessionScoped
    public class UserManager {
    
        private User current;
    
        // ...
    }
    

    @ManagedBean
    @RequestScoped
    public class Login {
    
        private String username;
        private String password;
    
        @ManagedProperty(value="#{userManager}")
        private UserManager userManager;
    
        @EJB
        private UserService userService;
    
        public String submit() {
            User user = userService.find(username, password);
    
            if (user != null) {
                userManager.setCurrent(user);
                return "home?faces-redirect=true";
            } else {
                addErrorMessage("Unknown login, please try again");
                return null;
            }
        }
    
        // ...
    }
    

    【讨论】:

    • 我试过这个,但它导致了以下异常:Unable to set property userManager for managed bean credentials。我错过了什么?我为 userManager 放置了 getter 和 setter,但什么也没有......
    • 如果您有与原问题无关的新问题,请按右上角的 按钮。不要忘记粘贴完整的堆栈跟踪,答案通常就是其根本原因。
    • 感谢您的快速回复,这是我的问题(刚刚发布)。
    • @BalusC - 实际上这可能的。我对这种设置的有效性也有同样的疑问。但是我偶然发现another question 解释了如何处理不匹配的范围。原始样本来自 JBoss,我尝试与 TomEE 类似。我可能更喜欢相反的方法(不确定,需要考虑一下,因此没有反对/赞成票)。
    • AAAARGH - 为什么我们仍然花费大量时间来实现和重新实现这些登录场景。我偶然发现的每个示例都是再次登录。难怪我们有这些安全漏洞。对于任何尝试实现登录的人 - 我强烈建议研究单点登录和 PicketLinkKeyCloak 等工具。只是说你知道......
    猜你喜欢
    • 2014-12-02
    • 2011-11-11
    • 2012-05-26
    • 2011-08-15
    • 2013-08-26
    • 1970-01-01
    • 2012-01-20
    • 2014-06-30
    • 2011-01-11
    相关资源
    最近更新 更多