[英]composite component recursive passing backing bean
我每个人都在尝试使用复合组件制作递归菜单,但是我不知道如何将backingbean传递到相同的复合组件中,mi代码看起来像这样
<composite:interface>
<composite:attribute name="bean" required="true"/>
<composite:attribute name="node" required="true"/>
</composite:interface>
<cc:implementation>
<--some code here-->
<c:if test="#{not empty cc.attrs.bean.obtainsubmenu(cc.attrs.node)}">
<c:foreach items="cc.attrs.bean.obtainsubmenu(cc.attrs.node)" var="submenu">
<!--some other code here-->
<menu:recursivemenu
bean="#{cc.attrs.bean}"
node="#{submenu.idOpc}"
/>
</c:foreach>
</c:if>
</cc:implementation>
方法getgetsubmenu仅返回对象列表,该方法看起来像这样
public List<myObject> obtainsubmenu(Long id){
return mymap.get(id); //where my maps is parametized this way Map<Long, List<MyObject>
}
对于我的菜单的第一个级别,它看起来可以正常工作,问题是当它尝试调用自身以进行递归时,它没有按原样粘贴对象引用,并且由于映射为空,我遇到了stackoverflow异常原因
有没有办法做到这一点??
坦克的帮助!
首先,您不应使用JSTL标签,而应使用JSF标签。
也不应该进行空检查
<composite:interface>
<composite:attribute name="bean" required="true"/>
<composite:attribute name="node" required="true"/>
</composite:interface>
<cc:implementation>
<--some code here-->
<ui:repeat value="#{cc.attrs.bean.obtainsubmenu(cc.attrs.node)}" var="submenu">
<!--some other code here-->
<menu:recursivemenu bean="#{cc.attrs.bean}" node="#{submenu.idOpc}"/>
</ui:repeat>
</cc:implementation>
但是,如果创建的是Primefaces菜单,则此方法将不起作用。 您必须在MenuModel
构建您的编程菜单
更一般而言,如果菜单根组件负责呈现其子组件本身( menuComponent.getRendersChildren()
返回true
),则这种方法将行不通。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.