我正在将当前的解决方案从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名称?
谢谢!
答案 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/