2016-07-21 12 views
0

Ich möchte eine Schaltfläche in der Header-Facette einer Primafaces-Datentabelle aktualisieren und es funktioniert nicht. Ich habe den Knopf außerhalb der Datentabelle kopiert, alles funktioniert gut.Primesurfaces Datentabelle Update in f: facet name = "header" funktioniert nicht

Die Aktualisierung sollte stattfinden, wenn das Filterereignis der Datentabelle ausgelöst wird. Ich aktualisiere explizit die Datentabelle, den äußeren und den inneren Knopf.

Es ist beabsichtigt, eine Schaltfläche mit einem Symbol anzuzeigen, wenn kein Filter festgelegt ist, und ein anderes Symbol, wenn ein Filter verwendet wird. In diesem Beispiel habe ich den Anwendungsfall vereinfacht: Wenn kein Filter verwendet wird, gibt es ein Open-Lock-Symbol. Wenn ich etwas in einen Filter eintippe, sollte ein Closed-Lock-Symbol angezeigt werden. Um die Sperre aufzuheben, muss man auf die Schaltfläche klicken (ich habe das Löschen des Filters in der Datentabelle nicht implementiert).

Von dem, was ich verstehe, verwende ich die richtige ID der Schaltfläche in der Kopfzeile. Also ich weiß nicht, warum das nicht funktioniert?

Ich bin mit mojarra 2.2 und primefaces 6.

<h:form id="id_form"> 
    <p:dataTable 
     id="id_table" 
     value="#{stateController.names}" 
     var="currentName"> 

     <p:ajax 
      event="filter" 
      listener="#{stateController.markLocked()}" 
      update="id_table id_form:id_table:id_button_inside id_form:id_button_outside"/> 

     <p:column 
      filterBy="#{currentName}" 
      filterMatchMode="contains"> 
      <f:facet name="header"> 
       <p:commandButton 
        id="id_button_inside" 
        action="#{stateController.markUnlocked()}" 
        icon="#{stateController.locked ? 'ui-icon-locked' : 'ui-icon-unlocked'}" 
        update="id_form"/> 
      </f:facet> 
      <h:outputText value="#{currentName}" /> 
     </p:column> 
    </p:dataTable> 

    <p:commandButton 
     id="id_button_outside" 
     action="#{stateController.markUnlocked()}" 
     icon="#{stateController.locked ? 'ui-icon-locked' : 'ui-icon-unlocked'}" 
     update="id_form" 
     /> 
</h:form> 

Ich habe auch versucht, eine Schaltfläche in einer separaten Spalte zu setzen. Mit dieser Schaltfläche (die in jeder Zeile der Datentabelle angezeigt wird) funktioniert auch alles.

+0

Try-Taste einzuwickeln in '' und aktualisieren: ' Artem

+0

Hallo @Artem, Entschuldigung für die späte Antwort. Ich habe es mit dem '' um den Button versucht, aber es ist das gleiche Ergebnis wie ohne das Panel :-( – Filou

Antwort

2

Es ist ein bisschen spät, aber vielleicht wird jemand es eines Tages nützlich finden.

Um das Filou-Problem zu lösen, müssen Sie remoteCommand außerhalb von dataTable definieren und die Header-Facette von dataTable aktualisieren.

<p:remoteCommand name="rmtCommand" update="id_form:id_table:id_button_inside"/> 
<p:dataTable 
    id="id_table" 
    value="#{stateController.names}" 
    var="currentName"> 

    <p:ajax 
     event="filter" 
     listener="#{stateController.markLocked()}" 
     oncomplete="rmtCommand()"/>