小编典典

素面 在另一个Ajax请求后不会消失

ajax

假设我有一些工具提示<p:dataTable>。当我更改dataTable另一页的页面时,我将鼠标移到任何工具提示上-
它会显示,但是在另一页加载后,工具提示永远不会消失。.我尝试使用进行更新p:ajaxp:remoteCommand但实际上没有任何帮助这提出了另一个Ajax要求,并且工具提示也卡住了。仅整页重新加载F5有效。

有没有人遇到过这样的问题?非常感谢你的帮助!


阅读 277

收藏
2020-07-26

共1个答案

小编典典

这看起来像是PrimeFaces错误,但是您可以通过JS隐藏有关分页事件的工具提示来解决此问题。

<p:dataTable value="#{bean.val}" var="row" rowIndexVar="rowIndex" rows="10" paginator="true">
    <p:ajax event="page" oncomplete="hideTooltips();" />

    <p:column>
        <h:outputText id="text" value="#{row}" />
        <!--
            since p:tooltip is located inside an iterative component (p:dataTable), we can't
            just define a static widgetVar value, because there will be a widget instance for
            each iteration, and each instance must have a unique widgetVar value, so we'll
            use rowIndex to achieve that
        -->
        <p:tooltip widgetVar="textTipVar#{rowIndex}" for="text" value="Tip" />
    </p:column>
</p:dataTable>
<script>
    function hideTooltips() {
        /*
            we've defined a bunch of widgetVars with a dynamic name, so we'll iterate over
            all widgets on the page and find the ones we need by looking for a known
            widgetVar prefix
        */
        for (var w in PrimeFaces.widgets) {
            if (w.indexOf('textTipVar') === 0) {
                PrimeFaces.widgets[w]._hide();
            }
        }
    }
</script>

这使用了未记录的Tooltip小部件方法_hide,在更新到另一个PrimeFaces版本时,请记住这一点,例如,方法名称可能会更改。该PrimeFaces.widgets对象也未记录。

2020-07-26