2016-07-29 23 views
1

Wenn wir eine Option einer primefaces wählen selectCheckboxMenu mit scrollen nach unten, nach Änderung Listener, die Komponente aktualisiert und scroll gehen nach oben und dieses Verhalten scheint falsch.Vermeiden scroll-up JSF primecefaces selectCheckboxMenu Komponente nach Änderung Etikett

Dies ist mein Code:

XHTML

<p:outputLabel for="profCat" value="Professional Category" /> 

<p:selectCheckboxMenu id="profCat" widgetVar="profCatW" 
    scrollHeight="175" 
    label="#{employeeForm.profCat.label}" 
    value="#{employeeForm.profCat.selectedItemIds}"> 

    <p:ajax event="toggleSelect" update="profCat" 
     listener="#{employeeForm.profCat.populateLabel}" 
     oncomplete="PF('profCatW').show()" /> 
    <p:ajax event="change" update="profCat" 
     listener="#{employeeForm.profCat.populateLabel}" 
     oncomplete="PF('profCatW').show()" /> 
    <f:selectItems value="#{employeeForm.profCat.items}" var="label" 
     itemLabel="#{label.label}" itemValue="#{label.optionId}" /> 
</p:selectCheckboxMenu> 

<p:message for="profCat" /> 

Java Listener

public void populateLabel() { 
     label = (selectedItemIds != null && selectedItemIds.size() > 0) 
       ? selectedItemIds.size() + " selected." : "Select"; 
} 

Die Änderung Label Wert java Zuhörer aber wir müssen die selectCheckboxMenu aktualisieren Aktualisieren Sie das Etikett von th ist kombiniert.

Jeder weiß eine Lösung zu lösen?

  1. Javascript scroll Wiederposition nach dem Update
  2. Jede Art und Weise zu vermeiden, blättern zu aktualisieren?
  3. Gibt es eine Möglichkeit, Combo-Label ohne Update-Komponente zu aktualisieren?
  4. Andere Komponente der anderen JSF-Bibliothek?

Mein B-Plan ist Update von Java-Code der Text der zugehörigen output dieses Verhalten zu vermeiden.

Vielen Dank im Voraus!

Grüße

+0

Aktualisieren Sie es Client-Seite? So entfernen Sie das Update der Komponente und auf die unvollständige Anzahl der Anzahl der ausgewählten Elemente clientseitig (vielleicht die Komponente hat eine Javascript API dafür) und aktualisieren Sie das Etikett über Javascript – Kukeltje

+0

Vielen Dank @Kukeltje! Ich habe den Weg gefunden, dies mit Javascript zu tun. – carlosyague

Antwort

1

Schließlich löste ich dieses Problem mit Hilfe von @Kukeltje.

definierte ich diese Javascript-Funktion:

function populateLabel(widgetVar) { 
     var count = PF(widgetVar).inputs.filter(":checked").length; 

     var label = count + " selected";  
     PF(widgetVar).jq.find('.ui-selectcheckboxmenu-label').text(label); 
} 

Und ich entfernt Updates auf Ajax-Hörer in meinem JSF Code:

<p:ajax event="toggleSelect" 
    listener="#{employeeForm.profCat.populateLabel}" 
    oncomplete="populateLabel('profCatW')" /> 
<p:ajax event="change" 
    listener="#{employeeForm.profCat.populateLabel}" 
    oncomplete="populateLabel('profCatW')" /> 

Um Fehlerfall bei der Validierung zu prüfen:

<h:outputScript rendered="#{facesContext.validationFailed}"> 
    populateLabel('profCatW'); 
</h:outputScript> 
+0

Funktioniert das für Sie, wenn Sie ein Element abwählen? Für mich scheint das nur zu funktionieren, wenn ich Gegenstände auswähle. – lazlev

+0

Es ist ein spezifischer Fehler in Version 6.1.5 (https://github.com/primefaces/primefaces/issues/2734) ... – lazlev