Primefaces p:overlayPanel 在子标记中使用更新属性时为空



我想在覆盖面板内显示数据表中的键值对列表,其中每个对是一行。单击键值对时,我想使用所选行的键值更新位于覆盖面板外部的<p:inputText>-Element,并同时关闭覆盖面板。

我刚刚从 PF 4.0 迁移到 PF 6.1,现在我遇到了一个问题,每当我在覆盖面板中使用更新属性时,它似乎都是空的,没有显示任何内容。

下面是一个代码示例:

<p:inputText
id="inputPvId"
styleClass="form_input"
readonly="true"
value="#{bean.selectedValue.get(0)}" />
<p:commandButton
icon="ui-icon-link"
id="selectValue"
value="#{msg_properties.chooseValue}" />
<p:overlayPanel
for="selectValue"
id="overlayValueSelector"
widgetVar="overlayValueSelector
dynamic="true"
styleClass="form_input_widest">
<p:dataTable
var="car"
value="#{dtBasicView.cars}">
<p:column
headerText="Id">
<h:outputText
value="#{car.id}" />
</p:column>
<p:column
headerText="Year">
<h:outputText
value="#{car.year}" />
</p:column>
<p:ajax
event="rowSelect"
update=":form:inputPvId,:form:myTable"
onsuccess="PF('overlayPV').hide()" />
</p:dataTable>

以前它是这样工作的。我所做的只是按照官方迁移指南的建议从"overlayPV".hide()"调用小部件到"PF('overlayPV').hide()"的方式。如果取消 ajax 调用中的update=":form:inputPvId,:form:myTable"行,则内容将正确显示。

我做错了什么吗?我的研究表明,其他人在覆盖面板和ajax更新方面也遇到了麻烦。但是,我没有找到适合我的问题的解决方案。

我尝试使用可表的"onRowClick"-属性以及widgetHide调用,如下所示:

<p:dataTable
onRowClick="PF('overlayPV').hide()" /> 

它工作正常,但是我不知道如何使用选择的值更新<p:inputText>-Element。我必须刷新页面以显示新值。如果有人为此提出解决方案,我会很高兴。提前谢谢。

我终于解决了这个问题。

我最初的问题是,每当<p:overlayPanel>内的元素包含"update"属性时,overlayPanel 都不会呈现任何内容并且显示为空。

我解决了<p:remoteCommand>-Tag 的问题,我将其放置在覆盖面板之外,如下面的示例代码所示:

<p:inputText
id="inputPvId"
styleClass="form_input"
readonly="true"
value="#{bean.selectedValue.get(0)}" />
<p:commandButton
icon="ui-icon-link"
id="selectValue"
value="#{msg_properties.chooseValue}" />
<p:overlayPanel
for="selectValue"
id="overlayValueSelector"
widgetVar="overlayValueSelector
dynamic="true"
styleClass="form_input_widest">
<p:dataTable
var="myTable"
value="#{dtBasicView.cars}"
onRowClick="remoteCommand()">
<p:column
headerText="Id">
<h:outputText
value="#{car.id}" />
</p:column>
<p:column
headerText="Year">
<h:outputText
value="#{car.year}" />
</p:column>
</p:dataTable>
</p:overlayPanel>
<p:remoteCommand
name="remoteCommand"
update="inputPvId, myTable"                                         
onsuccess="PF('overlayPV').hide()"/>

请注意我的 dataTable 的 onRowClick-Attribute,它在 te overlayPanel 之外调用 remoteCommand。远程命令比更新所有需要更新的元素,并关闭覆盖面板。

相关内容

  • 没有找到相关文章

最新更新