spring - JSF2 托管 bean 注释 + 作用域 + 注入(inject)混淆

标签 spring jsf jsf-2 jboss-weld

我想实现这个理想主义:

  1. 只有 1 个 JSF Bean 容器实现,例如仅使用 Spring 或 Weld,但不能同时使用两者。目前我使用 Spring 作为后端,所以我更喜欢 Spring。
  2. 如果只有 1 个注释,请在 @ManagedBean、@Named、@Model 之间进行选择
  3. 能够使用所有受支持的范围,例如 @RequestScoped、@SessionScoped、@ViewScoped、@FlashScoped,也许还有 @ConversationScoped
  4. JSF Bean 可以通过 spring-management-services(后端服务)注入(inject),也许使用 @Inject 或 @Autowired

到目前为止,我一直没有找到实现这些目标的最佳组合,因为据我所知,如果我错了,请纠正我:

  1. @ManagedBean 无法注入(inject) Spring 服务?
  2. @Named 可以使用 @Inject 注入(inject) Spring 服务,但 @Named 使用的是 Weld。我可以只使用 spring 来管理 @Named 而不是 Weld 吗?
  3. @Named 不支持 @ViewScoped 和 FlashScope?

请分享您的想法和经验。

谢谢你:-)

<小时/>

2011 年 3 月 15 日更新

发现一个有趣的page描述了如何使用 Spring 替换 Jboss Weld 作为 JSR 299 CDI 实现。基本上,问题 2 已经得到解答。第 1 个问题也得到了间接回答,因为我现在可以注入(inject) spring 服务。

但是,第三个问题仍然存在。如果我可以在 @Named 中使用 @ViewScoped 和 Flash Scope,比如this article,我会发现非常有帮助。 。 Flash作用域的实现还有待观察,但到目前为止我能得到的最接近的实现是this page .

希望,用 spring 替换weld 作为 jsr 299 实现仍然能让我使用 @ConversationScoped。

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

<小时/>

2011 年 3 月 18 日更新

成功使用Spring 3代替weld来进行@Named、@Inject。重要的是在 faces-config.xml 中设置 el-resolver。

据我所知,Spring 3 目前还不支持 CDI,所以@ConversationScoped 再见。

对于范围界定,我仍然必须使用 @Scope("request") 或 @Scope("session"),但如果我更喜欢 @RequestScoped (javax.enterprise.context.RequestScoped) 和 @SessionScoped,我可以使用 this article 提供的桥接器.

Spring 的范围(“ View ”)来自 this article就像魔术一样:-)

仍然存在一个问题,如何在 Scope("view")-beans 之间传递对象.. 祝我好运!

<小时/>

更新

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

所以基本上,我可以不用焊接,但是有了 spring,有了可用的公共(public)范围,包括 View 范围,dan 就可以使用 flash 对象在 bean 之间传递。

缺少的一件事是对话范围,这对我来说还不是一个主要问题。 希望 future 的 Spring 能够支持这个对话范围。

干杯:-)

最佳答案

我可以使用 ManagedProperty 注释成功注入(inject) Spring bean,如下所示。这是 JSF Managed Bean 上的。 Spring bean 用于后端,我更喜欢使用 spring 作为后端。

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

值(value)是这里最重要的事情。其实是 Spring 的 bean 名。我希望这会有所帮助。

关于spring - JSF2 托管 bean 注释 + 作用域 + 注入(inject)混淆,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5295514/

相关文章:

java - 为什么我从 hello world SpringBoot 收到 WhiteLabel 错误?

java - Spring REST如何支持带有列表和对象的JSON

java - 如何对字符串进行编码和解码以便在查询字符串中使用?

jsf-2 - JSF 2.0 在 bean(或页面?)之间传递数据

JSF 2.0更新primefaces对话框第一次不起作用

java.lang.IllegalArgumentException : Unable to locate Attribute with the the given name

java - 保存前未设置关系 ID

jsf - PrimeFaces 对话框延迟加载(动态 ="true")不起作用?

javascript - JavaScript 中的问题

java - JSF 2.0 : How present a 'stand by' message using AJAX?