Jsf 2 使用a4j的JSF复合组件:重复
我正在JSF2中创建一个复合组件…,在其中我定义了一个控制器属性,它应该指向一个处理组件背后逻辑的自定义对象 基本上,组件有一个下拉菜单,它是根据控制器提供的一些选项动态创建的 我试过这样的方法:Jsf 2 使用a4j的JSF复合组件:重复,jsf-2,richfaces,composite-component,Jsf 2,Richfaces,Composite Component,我正在JSF2中创建一个复合组件…,在其中我定义了一个控制器属性,它应该指向一个处理组件背后逻辑的自定义对象 基本上,组件有一个下拉菜单,它是根据控制器提供的一些选项动态创建的 我试过这样的方法: <composite:interface> <composite:attribute name="id" required="true" /> <composite:attribute name="cont
<composite:interface>
<composite:attribute name="id" required="true" />
<composite:attribute name="controller" required="true"/>
</composite:interface>
<composite:implementation>
<a4j:outputPanel layout="block" id="pnlTaskOptions" style="width:300px;">
<rich:dropDownMenu mode="ajax">
<f:facet name="label">
<h:panelGroup layout="block" styleClass="botonA" rendered="true">
<h:outputLink styleClass="solicitarAutorizacionA"
value="#{msg_autweb['etiqueta.aprobar']}"
immediate="true"/>
</h:panelGroup>
</f:facet>
<a4j:repeat value="#{cc.attrs.controller.taskOptions}" var="option">
<rich:menuItem label="opcion"
action="#{cc.attrs.controller.executeOption(option)}"
render="pnlTaskOptions">
</rich:menuItem>
</a4j:repeat>
</rich:dropDownMenu>
</a4j:outputPanel>
</composite:implementation>
cc.attrs.controller.taskOptions是在控制器的构造函数中填充的字符串arrayList
我已经调试了它的getter,并检查数组是否被正确检索,换句话说,检查它是否为空
但是菜单没有出现,就像没有子菜单项一样。
发生什么事?不能在复合组件内使用a4j:重复吗?代码>
只要我知道“action”标记属性中使用的属性必须定义为复合接口中的方法;i、 e在复合组件属性的定义中使用标记属性“方法签名”。它在复合组件之外工作吗?如果我没有错,你应该用
来代替。嗯,当我使用c:forEach时,像这样:它甚至不调用items属性的getter…我不会密切使用RichFaces,但是如果我没有错,使用ui:repeat
来生成rich:menuItem
甚至不会在复合之外工作。为此,您应该使用c:forEach
。但是在组合本身内部,当items
属性依赖于JSF呈现时间属性(例如,从另一个父级ui:repeat
或h:dataTable
的var
获取)时,c:forEach
反过来就不起作用。我认为标记文件毕竟对您来说更简单。很抱歉,BalusC,我犯了一个错误,在组件内部尝试c:forEach时出现了空指针异常。然而当我意识到这一点的时候。。。尽管我还没有在我的组件上测试使用ajax渲染属性。我还注意到,当使用c:forEach时,getter被调用了4次。。。为什么会这样?为什么我不能在复合材料中使用a4j:repeat或ui:repeat?。无论如何,非常感谢巴卢斯,你真的帮助了我。谢谢