JSF中的循环管理检测错误

che*_*tan 3 java jsf icefaces

我必须在A和B页面,我想从A到B导航,然后在JSF中从B导航到A. 我在A的托管bean中设置托管属性B,反之亦然,但问题是我得到了像MANAGED BEAN CYCLIC DETECTION这样的错误.

  <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>
Run Code Online (Sandbox Code Playgroud)

这个问题有解决方案或替代解决方案吗?

Bal*_*usC 13

这确实不可能.如果没有这种检测,它只会导致无限循环的托管属性设置.

要解决这个问题,只需让"父"bean在注入时将其自身设置在"子"bean中.

public class Parent {
    private Child child;

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

    // ...
}
Run Code Online (Sandbox Code Playgroud)

<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>
Run Code Online (Sandbox Code Playgroud)