当SelectOneMenu发生变化时,PrimeFaces会更新图库

时间:2013-08-28 11:37:04

标签: java jsf primefaces

我正在使用Primefaces 3.5。我有以下代码:

<p:panel id="containerSelectionPanel" header="Container Selection">
    <h:form id="containerSelectionForm">
        <p:selectOneMenu value="#{manageContainersBean.selectedContainer}">
            <f:selectItems value="#{manageContainersBean.containerList}" var="container" itemLabel="#{container.name}" />
            <p:ajax update=":componentSelectionPanel" />
        </p:selectOneMenu>
    </h:form>
</p:panel>

<p:panel id="componentSelectionPanel" header="Component Selection">
    <h:form id="componentSelectionForm">
        <p:galleria id="componentGallery" var="component"
            value="#{manageContainersBean.selectedContainer.components}">
            <p:graphicImage value="#{component.preview}" title="#{component.name}" alt="#{component.name}"></p:graphicImage>
        </p:galleria>
    </h:form>
</p:panel>

在网站启动时,图库会正确显示。但是,如果我更改选择 在SelectOneMenu中,图库只是空的(没有显示任何内容,&#34的面板;组件选择&#34;本身为空)。

通过AJAX请求进行更新有效。更新后检索组件列表,根据需要请求预览和名称。但是,为更新的库生成的HTML代码包含的行数非常少,比最初加载库时要少,请参见此处:

<ul class="ui-galleria-panel-wrapper">
    <li class="ui-galleria-panel ui-helper-hidden">
        <img id="j_idt28" alt="Have lunch" title="Have lunch">
    </li>
    <li class="ui-galleria-panel ui-helper-hidden">
        <img id="j_idt28" alt="Have brunch" title="Have brunch">
    </li>
</ul>

可以看出,虽然获取了新选择的容器,但图像有所更新(但是初始图库包含更多代码)。

我已经尝试更新完整的表单而不仅仅是库:相同的结果。我尝试将画廊移出表格本身:相同的结果。我尝试使用浏览器控制台中的Javascript更新尝试here,没有任何反应。

有人有解决这个问题的方法吗?

更新:我检查了服务器响应,在更新图库时会发送。它包含与初始响应完全相同的代码(当库工作时),因此在呈现响应期间JSF必定存在问题。但仍然不知道如何处理这个问题。

编辑:一般事情:表单不应该更新,而是完整的面板。

此致 bobbel

1 个答案:

答案 0 :(得分:0)

我发现问题已报告here

然后临时解决方案是修改containerSelectionForm中的ajax请求,如下所示:

<p:ajax 
    update=":componentSelectionPanel"           
    oncomplete="PrimeFaces.cw('Galleria','widget_componentSelectionForm_componentGallery',{id:'componentSelectionForm:componentGallery'}" />

PrimeFaces.cw()的来电中,请确保在对象中包含panelWidth等galleria参数,该参数已包含id