2010-11-24 10 views
3

私はページAとBを持っていなければなりません。私はAからBにナビゲートし、JSFではBからAに戻る必要があります。マネージドプロパティBをAのマネージドビーンに設定していますが、その逆の場合は、 MANAGED BEY CYCLIC DETECTIONのようなエラーが発生します。JSFの周期的なmanagebean検出エラー

<managed-bean> 
     <managed-bean-name>viewBulkMetalIssueBean</managed-bean-name> 
     <managed-bean-class>com.cc.jas.web.manufacturing.bulkmetalissue.ViewBulkMetalIssueBean</managed-bean-class> 
     <managed-bean-scope>request</managed-bean-scope> 
     <managed-property> 
     <property-name>viewJobcardBean</property-name> 
     <property-class>com.cc.jas.web.manufacturing.jobcard.ViewJobcardBean</property-class> 
     <value>#{viewJobcardBean}</value> 
     </managed-property> 


    </managed-bean> 


    <managed-bean> 
     <managed-bean-name>viewJobcardBean</managed-bean-name> 
     <managed-bean-class>com.cc.jas.web.manufacturing.jobcard.ViewJobcardBean</managed-bean-class> 
     <managed-bean-scope>request</managed-bean-scope> 
    <managed-property> 
     <property-name>viewBulkMetalIssueBean</property-name> 
     <property-class>com.cc.jas.web.manufacturing.bulkmetalissue.ViewBulkMetalIssueBean</property-class> 
     <value>#{viewBulkMetalIssueBean}</value> 
     </managed-property> 


     </managed-bean> 

この問題の解決方法または代替方法はありますか?

答えて

12

これは実際には不可能です。この検出がなければ、管理されたプロパティ設定の無限ループにつながるだけです。

これを回避するには、「親」Beanが注入されたときに「子」Beanに自身を設定させます。

<managed-bean> 
    <managed-bean-name>parent</managed-bean-name> 
    <managed-bean-class>com.example.Parent</managed-bean-class> 
    <managed-bean-scope>request</managed-bean-scope> 
    <managed-property> 
     <property-name>child</property-name> 
     <property-class>com.example.Child</property-class> 
     <value>#{child}</value> 
    </managed-property> 
</managed-bean> 

<managed-bean> 
    <managed-bean-name>child</managed-bean-name> 
    <managed-bean-class>com.example.Child</managed-bean-class> 
    <managed-bean-scope>request</managed-bean-scope> 
</managed-bean> 
+0

子から親に移動すると、nullポインタの例外がスローされます。親から子までうまく動作します – chetan

+1

あなたはこれをあまりに早くやっているようです。 Setterがまだ呼び出されていないため、コンストラクタではなく '@ PostConstruct'以降で行います。サイクリック注入が許可されたときには、まったく同じ問題を抱えているでしょう:) – BalusC

+0

sooryその私の失敗はうまくいくでしょう、答えに感謝します – chetan

2

JSFマネージドBeanにサイクリック注入を使用することはできません。これはMyFaces wikiでうまく説明されています。

代替の解決策は、(JSF 1.2)ELリゾルバを使用して、マネージドBean内のJavaコードから参照を検索することである。

ELContext elContext = FacesContext.getCurrentInstance().getELContext(); 
NeededBean neededBean = (NeededBean) FacesContext.getCurrentInstance().getApplication() 
    .getELResolver().getValue(elContext, null, "neededBean"); 

をさらに説明するためMyFaces wiki entryを参照し、他のJSFバージョンの実装。

+0

public class Parent { private Child child; public void setChild(Child child) { this.child = child; this.child.setParent(this); } // ... } 

それはそれはしかし、ハック方法です – chetan

+0

完璧に動作します。 – BalusC

+0

getValue()メソッドの中間値は何ですか? – chetan

関連する問題