0

我正在使用 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库中的选择只是空的(没有显示,“组件选择”面板本身是空的)。

通过 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 更新,但没有任何反应。

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

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

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

问候,鲍贝尔

4

1 回答 1

0

我发现这里报告的问题。

临时解决方案是修改ajax请求containerSelectionForm如下:

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

在调用中PrimeFaces.cw()一定要包含 Galleria 参数,就像panelWidth在对象中一样,它已经包含id.

于 2013-08-29T11:28:06.650 回答