PrimeFaces p:accordionPanel里面的ui:repeat或c:forEach

时间:2014-02-05 15:42:01

标签: jsf jsf-2 primefaces accordion uirepeat

我正在尝试创建多个accordionPanel。 我试图在重复元素中包含此标记(例如c:forEach)。 accordionPanel渲染得很好,但我无法从一个标签切换到另一个标签。

这些是我尝试的一些代码:

<ui:repeat value="#{myBackingBean.myList}" var="o">
    <p:accordionPanel dynamic="true" cache="true" multiple="true" widgetVar="accordion">
        <p:tab title="Title 1">
            #{o.data_one}
        </p:tab>
        <p:tab title="Title 2">
            #{o.data_two}
        </p:tab>
    </p:accordionPanel>
</ui:repeat>

<c:forEach items"${myBackingBean.myList}" var="o">
    <p:accordionPanel dynamic="true" cache="true" multiple="true" widgetVar="accordion">
        <p:tab title="Title 1">
            #{o.data_one}
        </p:tab>
        <p:tab title="Title 2">
            #{o.data_two}
        </p:tab>
    </p:accordionPanel>
</ui:repeat>

这两个代码都会生成一个accordionPanel列表,每个列表都有两个标签。 但我无法从一个标签切换到另一个标签:如果我单击一个标签,它不会打开也不会关闭(除了最后一个accordionPanel)。

值得注意的是,如果我手动放置两个或更多accordionPanel(没有JSF循环),它们就可以工作。

此外,我在尝试打开/关闭标签时检查了浏览器发送的请求。我拦截的请求如下:

<?xml version="1.0" encoding="utf-8"?><partial-response><changes><update id="mainForm:tabView"><![CDATA[
// something that always use the id of the HTML tag of the _last_ accordionPanel
</update></changes></partial-response>

如何将<accordionPanel>放入<ui:repeat><c:forEach>,以便我仍然可以切换accordionPanel的标签?

1 个答案:

答案 0 :(得分:1)

widgetVarp:accordion放入ui:repeat时会出现问题,它会生成具有不同/动态ID但不具有不同/动态widgetVar的Accordion Panel组件当您在代码中明确指定widgetVar时。

这基本上是Javascript对象的名称,用于访问p:accordion的客户端Api功能。

因此,如果您没有在任何地方使用widgetVarp:accordion删除 widgetVar属性,那么widgetVar将动态生成。

如果您仍想使用widgetVar,请自行提供动态名称,例如:

widgetVar="accordion_#{o.data_one}" 

注意:我只在ui:repeat上尝试了上述策略 使用:Primefaces 3.5和JSF 2.1.13及其为我工作。