【问题标题】:JSF2.0 Passing Value objects between managed beansJSF2.0 在托管 bean 之间传递值对象
【发布时间】:2011-02-08 14:06:33
【问题描述】:

我已经使用 Weblogic 10.3.4、PrimeFaces 和 JQuery 编写了一个小型 JSF2.0 应用程序。我现在正在考虑将我们的 Main Web App 转换为 JSF2.0。这是目前使用 Weblogic 8.1、Java 1.4 和 JSP 的。我目前的问题是将对象从一个托管 bean 传递到另一个托管 bean 的最佳方法是什么。我们的应用程序由许多屏幕组成,但一般模式是在第一个屏幕上输入一个引用,然后在提交时从数据库中查找它并填充一个值对象(标准 java bean)。然后返回屏幕 2,它通常是由值对象的变量组成的表格,可供编辑。

目前,所有需要的对象都作为属性保存在第一个屏幕(在自定义编写的控制器类中)的 HTTPServletRequest 对象中,然后在后续屏幕中从中检索。

这仍然是这样做的方式还是我错过了一种新的“JSF”方式。我也考虑过将这些值对象存储在用户会话 bean 中(无论如何我们都会有),然后在需要时从那里检索。我认为在这种情况下,包含值对象的 Map 将是最好的方法?

【问题讨论】:

    标签: java jsf jsf-2


    【解决方案1】:

    您可以通过 @ManagedProperty 将一个托管 bean 注入另一个托管 bean。

    假设你有一个像这样的会话范围 bean

    @ManagedBean
    @SessionScoped
    public class User {
        // ...
    }
    

    还有一个像这样的请求范围 bean

    @ManagedBean
    @RequestScoped
    public class Profile {
    
        @ManagedProperty(value="#{user}") // #{user} is the managed bean name
        private User user;
    
        @PostConstruct
        public void init() {
            // User is available here for the case you'd like to work with it
            // directly after bean's construction.
        }
    
        public String save() {
            // User is available here as well, during action methods.
            userDAO.save(user);
        }
    
        // +getter +setter
    
    }
    

    【讨论】:

    • 感谢您的快速回复。我已经设法使上述工作很好。我需要在第 2 页上构建表单。我确实尝试在构造函数中实例化保存的 VO,但得到了一个 nullPointer。然后我使用@PostConstruct 方法来实例化和设置我的表单变量。我认为@PostConstruct 是 JSF2.0 中可接受的方法?
    • 托管属性不可能在构建 bean 之前由 bean setter 设置。所以,是的,@PostConstruct 是在构造之后直接使用托管属性的正常方法。
    • 太棒了。向上和向上我去:)
    猜你喜欢
    • 2013-07-09
    • 1970-01-01
    • 2012-02-07
    • 2017-03-02
    • 2014-08-29
    • 2011-06-02
    • 2015-12-02
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多