Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/326.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java JSF中的循环managebean检测错误_Java_Jsf_Icefaces - Fatal编程技术网

Java JSF中的循环managebean检测错误

Java JSF中的循环managebean检测错误,java,jsf,icefaces,Java,Jsf,Icefaces,我必须浏览A和B页,我想在JSF中从A导航到B,从B返回到A。我在A的托管bean中设置了托管属性B,反之亦然,但问题是我得到了如下错误 托管BEAN循环检测 <managed-bean> <managed-bean-name>viewBulkMetalIssueBean</managed-bean-name> <managed-bean-class>com.cc.jas.web.manufacturing.bulkme

我必须浏览A和B页,我想在JSF中从A导航到B,从B返回到A。我在A的托管bean中设置了托管属性B,反之亦然,但问题是我得到了如下错误 托管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>

ViewBulkMetalisheBean
com.cc.jas.web.manufacturing.bulkmetalissue.ViewBulkMetalIssueBean
要求
viewJobcardBean
com.cc.jas.web.manufacturing.jobcard.ViewJobcardBean
#{viewJobcardBean}
viewJobcardBean
com.cc.jas.web.manufacturing.jobcard.ViewJobcardBean
要求
ViewBulkMetalisheBean
com.cc.jas.web.manufacturing.bulkmetalissue.ViewBulkMetalIssueBean
#{viewBulkMetalisseBean}

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

在JSF管理的bean中不能有循环注入。这在本文中得到了很好的解释

另一种解决方案是使用EL解析器(对于JSF 1.2),从托管bean中的java代码中查找引用:


请参阅以获得进一步的解释,以及其他JSF版本的实现。

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

为了解决这个问题,只需在注入“父”bean时,让它自己在“子”bean中设置

public class Parent {
    private Child child;

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

    // ...
}


父母亲
com.example.Parent
要求
小孩
com.example.Child
#{child}
小孩
com.example.Child
要求

当我从子级导航到父级时,它将引发空指针异常。从父母到孩子都很好,显然你做得太早了。在
@PostConstruct
或更高版本中执行,而不是在构造函数中执行,这仅仅是因为还没有调用setter。顺便说一下,当循环注入被允许时,您会遇到完全相同的问题:)我能知道getValue()方法的中间值是什么吗?
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>