2010-11-24 21 views
3

我必須頁面A和B,我想從A導航到B,然後從JS導航回到B.我在A的託管bean中設置託管屬性B,反之亦然,但問題是我得到了一個錯誤,如 管理bean循環檢測。JSF中的循環管理bean檢測錯誤

<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。

public class Parent { 
    private Child child; 

    public void setChild(Child child) { 
     this.child = child; 
     this.child.setParent(this); 
    } 

    // ... 
} 

隨着

<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> 
2

您不能在JSF託管的bean中進行循環注入。這在MyFaces wiki中有很好的解釋。

一種替代的解決方案是使用EL解析器(用於JSF 1.2)你的託管bean內查找從Java代碼的參考:

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

參見MyFaces wiki entry作進一步的解釋,以及用於其它JSF版本實現。

+0

它的工作原理完美 – chetan 2010-11-24 12:01:04

+0

它。然而哈克的方式。 – BalusC 2010-11-24 12:04:20