Disons que j'ai des info-bulles dans mon <p:dataTable>. Lorsque je change la page de dataTable et qu'une autre page s'affiche, je déplace la souris sur n'importe quelle info-bulle - elle apparaît, mais une fois que l'autre page est chargée, l'info-bulle ne disparaît jamais .. J'ai essayé de mettre à jour ceci en utilisant { {X2}}, p:remoteCommand mais rien n'y fait, en fait cela a fait une autre requête Ajax et les info-bulles sont également bloquées. Seul le rechargement de la page complète F5 fonctionne.

Quelqu'un at-il rencontré un tel problème? Merci beaucoup pour votre aide!

6
Rafcik 15 juil. 2015 à 14:07

2 réponses

Meilleure réponse

Cela ressemble à un bogue PrimeFaces, mais vous pouvez le contourner en masquant les info-bulles sur les événements de pagination via 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>

Cela utilise une méthode de widget d'info-bulle non documentée _hide, gardez cela à l'esprit lors de la mise à jour vers une autre version de PrimeFaces, par exemple le nom de la méthode peut changer. L'objet PrimeFaces.widgets n'est pas non plus documenté.

4
Vsevolod Golovanov 21 juil. 2015 à 11:44

Au cas où quelqu'un d'autre se débat avec cela, je pense que j'ai trouvé une solution qui vaut la peine d'être essayée. Dans mon cas, j'avais une info-bulle qui montrait lorsque je survolais un bouton de commande, mais si je cliquais dessus, il exécuterait une requête ajax et reviendrait, mettrait à jour un composant et terminerait mais l'info-bulle resterait toujours. C'est ce que j'ai fait pour y remédier.

<p:tooltip id="saveDeleteTooltip" globalSelector="[data-tooltip]" position="top" hideEvent="mouseleave click"/>

Fournissez deux événements pour l'attribut hideEvent et semble reconnaître et utiliser les deux. Le premier est pour la souris normale, mais le second se déclenche lorsque je clique sur mes boutons de commande, il cache l'info-bulle comme il était censé le faire.

3
MarkyMarksFunkyBunch 31 mai 2018 à 15:07