Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/spring/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Spring JSF2托管bean注释&x2B;范围+;注射混乱_Spring_Jsf_Jsf 2_Jboss Weld - Fatal编程技术网

Spring JSF2托管bean注释&x2B;范围+;注射混乱

Spring JSF2托管bean注释&x2B;范围+;注射混乱,spring,jsf,jsf-2,jboss-weld,Spring,Jsf,Jsf 2,Jboss Weld,我想实现这个理想主义: 要使JSFbean容器只有一个实现,可以只使用Spring或Weld,但不能同时使用两者。目前我的后端使用Spring,所以我更喜欢Spring 要仅具有1个注释,请在@ManagedBean、@Named、@Model之间进行选择 要能够使用所有支持的作用域,例如@RequestScope、@SessionScope、@ViewScope、@FlashScope,还可以使用@ConversationScope JSFbean可以注入spring管理的服务(后端服务),可

我想实现这个理想主义:

  • 要使JSFbean容器只有一个实现,可以只使用Spring或Weld,但不能同时使用两者。目前我的后端使用Spring,所以我更喜欢Spring
  • 要仅具有1个注释,请在@ManagedBean、@Named、@Model之间进行选择
  • 要能够使用所有支持的作用域,例如@RequestScope、@SessionScope、@ViewScope、@FlashScope,还可以使用@ConversationScope
  • JSFbean可以注入spring管理的服务(后端服务),可能使用@Inject或@Autowired
  • 到目前为止,我还没有找到实现这些目标的最佳组合,因为据我所知,如果我错了,请纠正我:

  • @ManagedBean不能注入spring服务吗
  • @可以使用@Inject将Named注入到spring服务中,但是@Named使用的是Weld。我可以用spring来管理@Named而不是Weld吗
  • @命名的不支持@ViewScope和FlashScope
  • 请分享你的想法和经验

    谢谢:-)


    2011年3月15日更新 发现了一个有趣的例子,描述了如何将Jboss Weld替换为Spring作为JSR 299 CDI实现。所以基本上,第二个问题得到了回答。第一个问题也是间接回答的,因为我现在可以注入spring服务了

    但第三个问题仍然存在。如果我能在@Named中使用@ViewScoped和Flash范围,我会觉得非常有用,比如。Flash scope的实现还没有被看到,但到目前为止我能得到的最接近的一个是

    希望将weld替换为spring作为jsr 299实现仍能使我使用@ConversationScope

    现在要测试了,祝我好运:-)


    2011年3月18日更新 成功地使用Spring 3而不是weld来执行@Named、@Inject。重要的是在faces-config.xml中设置el解析器

    好吧,Spring3目前还不支持CDI,所以bye2@conversationscope

    对于作用域,我仍然必须使用@Scope(“请求”)或@Scope(“会话”),但如果我更喜欢@RequestScope(javax.enterprise.context.RequestScope)和@SessionScope,我可以使用提供的桥

    spring的范围(“视图”)来自magic等作品:-)

    但是仍然存在一个问题,即如何在作用域(“视图”)-bean之间传递对象。。 祝我好运


    更新 啊。。终于完成了。。 使用JSF2提供的Flash传递变量真的很神奇。 我不需要第三方实现

    基本上,我可以不使用weld,但是使用spring,使用包括视图范围在内的常用范围,dan可以使用flash对象在bean之间传递

    缺少的一点是对话范围,这对我来说还不是一个大问题。 希望未来的春天能够支持这一对话范围

    干杯:-)

    Weld(实际上,of,也称为JavaEE6CDI)是为了在JavaEE6环境中替代Spring而发明的。我建议使用JavaEE6CDI而不是Spring。当JavaEE6提供现成的相同功能时,为什么要使用第三方框架


    如果Spring后端确实无法更改,那么我建议坚持使用它,不要与Java EE 6 CDI注释混合使用,以避免混淆和维护问题。

    我可以使用如下ManagedProperty注释成功地注入Springbean。这是在JSF托管Bean上实现的。Springbean用于后端,我更喜欢Spring用于后端

    @ManagedProperty(name="userRepository", value="#{userRepository}")
    private UserRepository userRepository;
    //Setter and/or Getter
    

    价值在这里是最重要的。这实际上是春天的名字。我希望这能有所帮助。

    @BalusC:如果我在服务层坚持使用Spring,我应该在JSF Bean(@ManagedBean vs@Named)中使用什么注释?根据我的经验,使用@ManagedBean可以和@ViewScope一起工作,但@Named不能。使用@ManagedBean,我不能使用@Autowired或@inject注入我的spring服务,但是使用@Named,我可以使用@inject注入spring服务。你对此有什么建议吗?谢谢你,巴卢斯克!我不做Spring,所以我不能详细介绍,但我认为这个链接很有用:@BalusC:谢谢,这篇文章向我展示了一些我以前不知道的东西,非常好。但是,在spring之外,如果我使用@Named而不是@ManagedBean,我仍然会遇到无法使用@ViewScope的问题。。也许还有闪光灯(这个我还没试过)?你遇到过这样的情况吗?谢谢。CDI为此提供了服务。@BalusC:所以基本上,我可以用@ConversationScope来代替@ViewScope。为了获得与@ViewScope相同的行为,我想这样做:在@PostConstruct,我执行conversation.begin(),任何可以更改为另一个视图的方法,我执行conversation.end(),对吗?但是如果是这种情况,如果用户不点击结束当前对话的按钮并点击其他菜单中的另一个程序,会发生什么?前一个bean的对话到那时不会结束。