我正在使用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
答案 0 :(得分:0)
我发现问题已报告here。
然后临时解决方案是修改containerSelectionForm
中的ajax请求,如下所示:
<p:ajax
update=":componentSelectionPanel"
oncomplete="PrimeFaces.cw('Galleria','widget_componentSelectionForm_componentGallery',{id:'componentSelectionForm:componentGallery'}" />
在PrimeFaces.cw()
的来电中,请确保在对象中包含panelWidth
等galleria参数,该参数已包含id
。