我是注释的新手,我正在尝试jsf(2.0)spring(3.1)集成,我可以集成这两个框架,但我在jsf中没有viewScope,因为它不可用。我想使用注释在jsf-managedBean中自动注入springbean,但我做不到,因为spring只支持会话和请求范围bean。
我使用一个检索bean的Util类"SprigUtil.getBean('bean')";。并在需要时手动检索春豆。
我想做一些像这样的
@CustomAnnotation('beanTest')
private Bean bean;
因此,bean属性将使用beanTestbean进行设置。
我的目标(抛开春天不谈)是知道如何做一些类似的事情
@assign('House')
private String place;
并且当我调用CCD_ 1时;House";。instance.getPlace(),返回'House'
注:我知道@Autowired,但我不能使用它,因为ViewScope在spring-jsf集成中不可用。
我读过关于手动实现视图范围的文章,但想尝试不同的解决方案。
编辑:
我的FacesConfig:
<?xml version="1.0" encoding="UTF-8"?>
<faces-config xmlns="http://java.sun.com/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
http://java.sun.com/xml/ns/javaee/web-facesconfig_2_1.xsd"
version="2.1">
<application>
<el-resolver> org.springframework.web.jsf.el.SpringBeanFacesELResolver
</el-resolver>
</application>
</faces-config>
和我的appContext
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:context="http://www.springframework.org/schema/context"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-3.1.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context-3.1.xsd">
<context:component-scan base-package="*" />
</beans>
我的春豆
@Component
public class ProductService{
}
我的托管Bean
@Component
@Scope("request")//I need to use @Scope("view") but it doesn't exist
public ProductBean implements Serializable{
@Autowired
ProductService productoService;
}
如果我使用jsf注释@ManagedBean和@ViewScoped productService未注入(为空)
您可以使用@ManagedProperty将springbean注入视图范围的托管bean
对于名为B 的弹簧组件
@ManagedProperty("#{B}")
private B b;
public void setB(B b) {
this.b = b;
}
应该起作用。
至于你发布的代码,Component是一个Spring注释,要使用ViewScoped,你必须用ManagedBean注释来注释你的类:
@ManagedBean
@ViewScoped
public ProductBean implements Serializable {
@ManagedProperty("#{productService}")
private ProductService productService;
public void setProductService(ProductService productService) {
this.productService = productService;
}
}
您可能想查看以下链接,以更好地了解JSF 2.0中的作用域JSF 2.0通信中的