Jsf 2 使用a4j的JSF复合组件:重复

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

我正在JSF2中创建一个复合组件…,在其中我定义了一个控制器属性,它应该指向一个处理组件背后逻辑的自定义对象

基本上,组件有一个下拉菜单,它是根据控制器提供的一些选项动态创建的

我试过这样的方法:

<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?。无论如何,非常感谢巴卢斯,你真的帮助了我。谢谢