首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Primefaces :当在子标记中使用update属性时,overlayPanel为空

Primefaces :当在子标记中使用update属性时,overlayPanel为空
EN

Stack Overflow用户
提问于 2018-03-12 14:21:29
回答 1查看 866关注 0票数 3

我想在datatable中显示一个键值对的列表,其中每一对都是一行,在一个覆盖面板中。当单击键值对时,我希望使用选定行的键值更新位于覆盖面板之外的<p:inputText>-Element,并同时关闭覆盖面板。

我刚从PF 4.0迁移到PF 6.1,现在我面临着这个问题,每当我在覆盖面板中使用一个更新设置时,它似乎是空的,并且没有显示任何内容。

下面是一个代码示例:

代码语言:javascript
复制
<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()"调用Widget的方式,正如官方迁移指南所建议的那样。如果将ajax调用中的update=":form:inputPvId,:form:myTable"行取消,内容将正确显示。

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

我尝试使用datable的"onRowClick"-Attribute和widgetHide调用,如下所示:

代码语言:javascript
复制
<p:dataTable
        onRowClick="PF('overlayPV').hide()" /> 

它工作得很好,但是我不知道如何用选择的值更新<p:inputText>-Element。我必须刷新页面以显示新值。如果有人提出解决这个问题的办法,我会很高兴的。提前谢谢。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-03-13 13:40:52

我终于解决了这个问题。

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

我用<p:remoteCommand>-Tag解决了我的问题,我把它放在overlayPanel之外,我的示例代码如下所示:

代码语言:javascript
复制
<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-属性,它在te overlayPanel之外调用remoteCommand。remoteCommand比更新我需要更新的所有元素还要关闭overlayPanel。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/49237554

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档