0

我是注释新手,我正在尝试 jsf(2.0) spring (3.1) 集成,我可以集成这两个框架,但我在 JSF 中没有 viewScope,因为它不可用。我想使用注解在jsf managedBean中自动注入spring bean,但我不能,因为Spring只支持会话和请求范围bean。

我使用检索 bean 的 Util 类。“SprigUtil.getBean('bean')”。并在需要时手动检索弹簧豆。

我想做一些这样的事情

@CustomAnnotation('beanTest')
private Bean bean;

因此,bean 属性将使用 beanTest bean 进行设置。

我的目标(撇开春天)是知道如何做这样的事情

@assign('House')
private String place;

当我调用getMethod获取“房子”时。instance.getPlace(),返回“房子”

注意:我知道 @Autowired 但我不能使用它,因为 ViewScope 在 spring-jsf 集成中不可用。

我阅读了有关手动实现视图范围的信息,但想尝试不同的解决方案。

编辑:

我的 Faces 配置:

<?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 未注入(为空)

4

1 回答 1

0

您可以使用@ManagedProperty将 spring bean 注入视图范围的托管 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中的通信

于 2013-02-22T10:17:06.520 回答