我必须转到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>这个问题有什么解决方案或替代方案吗?
发布于 2010-11-24 18:43:36
这确实是不可能的。如果没有此检测,它只会导致托管属性设置的无限循环。
要解决这个问题,只要让“父”bean在注入“子”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>发布于 2010-11-24 14:24:30
在JSF托管bean中不能有循环注入。这在MyFaces wiki中得到了很好的解释。
另一种解决方案是使用EL解析器从托管bean中的java代码中查找引用(对于JSF 1.2):
ELContext elContext = FacesContext.getCurrentInstance().getELContext();
NeededBean neededBean = (NeededBean) FacesContext.getCurrentInstance().getApplication()
.getELResolver().getValue(elContext, null, "neededBean");有关更多解释,以及其他MyFaces wiki entry版本的实现,请参阅JSF.
https://stackoverflow.com/questions/4263907
复制相似问题