【问题标题】:How to inject a JSF bean into a spring bean如何将 JSF bean 注入 Spring bean
【发布时间】:2013-06-25 11:10:29
【问题描述】:

我正在开发一个遗留 JSF 应用程序,我们正在慢慢将其移植到 Spring MVC。我们使用 Spring Security 来控制登录信息。用户登录后,JSF 页面全局实例化一个在任何地方使用的会话范围的 bean。我想更改应用程序,以便我们可以先转到使用 Spring MVC 开发的页面。

我尝试的一种方法是将 bean 转换为 Spring bean 并将其注入 JSF,但不幸的是,这需要对 bean 进行大量更改才能使其成为可能。我想到的一种可能的技巧是在将用户发送到 Spring MVC 页面之前添加一个特殊的重定向 JSF 页面来初始化 JSF bean。不过,这似乎有点像 hack,所以我正在寻找另一种解决方案。

是否有其他方法可以强制在我转到 Spring 页面之前初始化会话范围的 bean,以便我可以将 bean 拉出会话?

【问题讨论】:

    标签: spring jsf spring-mvc spring-security jsf-1.2


    【解决方案1】:

    如果您使用 Spring MVC,您可以将“bean”设置为模型属性,然后使用控制器上的注释、处理程序方法和创建您的实例的方法将其自动加载到会话中豆角,扁豆。你的控制器看起来像这样:

    @Controller
    @SessionAttributes({"myBean"})
    @RequestMapping("/myPath")
    public class MyController {
      @RequestMapping("/myPath2")
      public String myHandler(@ModelAttribute("myBean") MyBean myBean) {
        // ...do stuff, return view
      }
    
      @ModelAttribute("myBean")
      MyBean createMyBean() {
        // Create and init an instance
        return new MyBean();
      }
    }
    

    只要没有 MyBean,您就会得到一个神奇地为您创建的 MyBean,并且每当您使用“myBean”更新模型(或 ModelAndView)时,它也会神奇地添加到 Session 中。

    【讨论】:

    • 我一开始就试过了。不幸的是,这个特定的 bean 对其他 JSF bean 和 JSF 消息上下文有很多依赖关系。这似乎需要做很多工作。我真的希望最终能摆脱这个 bean,但它几乎与所有东西都有联系!
    • 嗯,这是最“春天”的方式。除此之外,如果它已经在会话中,您可以跳过“createXXX”方法,直接在 HttpSession 之外使用它。
    • 是的,这就是我想要做的,但是 JSF 不会初始化 bean,直到你进入一个请求它的 jsf 页面。 :(
    • 您可以让 jsf 为您创建 bean 而无需重定向。查看此网站以获取 Balus 的解决方案。
    猜你喜欢
    • 2014-07-01
    • 2011-07-16
    • 1970-01-01
    • 2011-08-16
    • 2015-04-15
    • 2012-05-21
    • 2011-12-10
    • 2011-09-05
    • 2012-05-01
    相关资源
    最近更新 更多