当前位置: 首页 > 知识库问答 >
问题:

如何将JSF bean注入spring bean

寿子轩
2023-03-14

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

我尝试的一种方法是将bean转换为spring bean,并将其注入JSF,但不幸的是,这需要对bean进行大量更改才能实现。我想到的一个可能的方法是添加一个特殊的重定向JSF页面,以便在将用户发送到Spring MVC页面之前初始化JSF bean。这似乎是一个相当大的黑客虽然,所以我正在寻找另一个解决方案。

在进入Spring页面之前,是否有其他方法可以强制初始化session作用域bean,以便将bean从session中取出?

共有1个答案

蒋硕
2023-03-14

如果使用Spring MVC,可以将“bean”作为模型属性,然后使用控制器、处理程序方法和创建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)时,它也将神奇地添加到会话中。

 类似资料:
  • 我有一些UserService对用户实体进行操作。我创建了自己的注释和ConstraintValidator类作为实现 我需要将UserService注入到ConstraintValidator中。而且,正如spring文档所说,在注册bean之后: 不幸的是,它对我没有作用。我在字段(在实现ConstraintValidator的类内)使用NullPointerException累加stackt

  • 我正在使用匕首2,我有一个定义如下的: 这是FYViewModel的: 但是,变量始终为空。 如何使用匕首2将Repositroy注入我的ViewModel?

  • 问题内容: 我有灰熊提供的球衣。 我有一个实现类。但是,为所有传入请求创建一次此类。因此,这样做: 该为空。我可以将上下文注入到被调用的实际端点中,但这相当粗陋和丑陋,对我来说真的没有用;因为我希望记录各种请求。理想情况下,希望在请求的ResponseFilter端获取此对象。 必须有一种简单的方法来执行此操作。到目前为止,我所看到的所有问题/答案都不适用于Grizzly,也无法插入REST端点调

  • 问题内容: 假设我有一个我没有源代码的库(或者它是用某种尚未意识到模块的非Java语言编写的)。没有,我不想将其用作自动模块,所以我想注入它。 我首先使用以下命令生成: 假设这生成了这样的内容: 然后,我尝试编译它,但是由于软件包和不存在而失败: 当然,我可以创建目录并在其中创建虚拟类,但是有更好的方法吗? 问题答案: 是的,使用该选件是可能的。此选项最常在运行时使用,但在编译时也可以使用:

  • 我有一个问题是将EJB注入到抽象类中,抽象类是我JSF CDI bean的父类。在我的项目中,我使用MyFaces CODI 1.0.5(ViewScope),Omniface 1.3,PrimeFaces 3.4.2和GlassFish3.1.2。 应用程序是一个EAR,抽象类位于EJB模块中,JSF CDI bean位于WAR模块中: 我的抽象类: 我的CDIBean: 当我部署应用程序并访问

  • 我们正在构建一个应用程序,我们需要将实体更新登录到历史表中。我试图通过Hibernate拦截器来实现这一点,我们可以设法获得所有的更改,但很难将它们插入审计表。 我的JPA配置 我的拦截器 } 在方法afterTransactionCompletion中,我需要将所有审计实体写入DB,Autowire不工作,因为这不是spring管理的bean,是否有任何方法可以在此方法中获取DB会话,以便我可以