2010-11-24 3 views
3

페이지 A와 B가 있어야합니다. JS에서 A에서 B로, B에서 A로 돌아가고 싶습니다. 관리되는 속성 B를 A의 관리 빈과 비자로 설정했지만 문제는 비공개주기 탐지를 사용하는 것과 같은 오류가 발생했습니다.JSF에서 순환 관리 오류 감지 오류

<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

실제로 가능하지 않습니다. 이 탐지 기능이 없으면 관리 속성 설정이 무한 루프로 이어질뿐입니다.

이 문제를 해결하려면 "parent"bean이 삽입되었을 때 "child"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> 
+0

자식에서 부모로 이동할 때 null 포인터 예외를 throw합니다. 부모부터 자식까지 잘 작동합니다. – chetan

+1

분명히이 일을 너무 일찍하고 있습니다. setter가 아직 호출되지 않았기 때문에 생성자가 아닌'@ PostConstruct' 또는 이후 버전에서 수행하십시오. 당신은 그런 식으로 사이클 주입이 허용되었을 때 정확히 같은 문제가 생길 것입니다. – BalusC

+0

soory 그것의 내 잘못이 잘 작동 할 것입니다, 대답 해 주셔서 감사합니다. – chetan

2

JSF 관리 빈에서 순환 주입을 수행 할 수 없습니다. 이것은 MyFaces wiki에 잘 설명되어 있습니다.

대체 솔루션 (JSF 1.2)는 EL 확인자 사용하여 관리 빈 내에서 자바 코드에서 참조를 찾아 볼 수 있습니다 :

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

추가 설명은 MyFaces wiki entry를 참조하십시오, 그리고 다른 JSF 버전 구현 .

+0

으로 그것은 그러나 해키 방법 – chetan

+0

완벽하게 작동합니다. – BalusC

+0

getValue() 메소드의 중간 값이 무엇인지 알 수 있습니까? – chetan