0

私はアノテーションが初めてで、jsf(2.0) spring (3.1) 統合を試みています。2 つのフレームワークを統合できましたが、JSF に viewScope がありません。アノテーションを使用して jsf managedBean に自動的に Spring Bean を注入したいのですが、Spring はセッション Bean とリクエスト スコープ Bean しかサポートしていないため、できません。

Bean を取得する Util クラスを使用します。"SprigUtil.getBean('bean')". 必要に応じて春豆を手動で取得します。

私はこのようないくつかをしたい

@CustomAnnotation('beanTest')
private Bean bean;

したがって、Bean 属性は beanTest Bean で設定されます。

私の目的(春は別として)は、このようなことを行う方法を知ることです

@assign('House')
private String place;

そして、getMethod取得する「ハウス」を呼び出すと。instance.getPlace()、「家」を返す

注: @Autowired については知っていますが、Spring-jsf 統合では ViewScope を使用できないため、使用できません。

ビュースコープを手動で実装することについて読みましたが、別のソリューションを試してみたいと思っています。

編集:

私の顔構成:

<?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 は注入されません (null です)

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 に答える