将Spring 3 bean注入JSF 2托管bean的干净方法?

时间:2011-10-31 11:25:28

标签: spring jsf-2 annotations

我正在将当前的解决方案从JSF 1.2迁移到JSF 2.因为我需要使用新的View范围,所以我正在使用JSF 2注释。这迫使我使用JSF @ManagedProperty注释而不是Spring的@Autowired注入Spring bean

之前是这样的:

@Autowired private OneService oneService

现在就像:

@ManagedProperty(value="#{oneServiceImpl}")
private OneService oneService

您是否知道是否有办法注释托管属性而无需声明其bean名称?

谢谢!

2 个答案:

答案 0 :(得分:2)

不,没有。 JSF使用表达式语言(EL)来确定您按名称引用的类。使用一个名为ELResolver的类,他接受传递的String,解释并做出适当的引用。类SpringBeanFacesELResolver提供了两个框架之间的集成,拦截请求并将其传递给Spring的上下文,Spring处理提供ManagedBeans所需的依赖关系,然后ManagedBeans将其传递给JSF自己的ELResolver。因此,JSF需要bean的名称才能知道要注入的内容。

答案 1 :(得分:0)

你仍然可以将Spring与JSF一起使用2.只需创建一个自定义的Spring作用域,然后可以将其用作bean的视图作用域。

@Named @Scope("view")
public class MyBean {

    @Inject
    private MyManagedProperty oneService;

    //...

}

在此处窃取View范围的实施:http://cagataycivici.wordpress.com/2010/02/17/port-jsf-2-0s-viewscope-to-spring-3-0/