2016-05-13 8 views
0

Ich brauche Ihre Hilfe bei der Aktualisierung nur eine bestimmte Zeile Werte in einer DataTable nicht die gesamte DataTable mit bestimmten Werten, sobald der Benutzer auf die Schaltfläche "Update" klicken.So aktualisieren Sie bestimmte Zeile in DataTable mit den aktualisierten Informationen von Backing-Bean

Datatable wie folgt aussieht:

<p:dataTable value="#{testController.employeeList}" id="Employee" var="emp" 
rowIndexVar="rowIndex" 
    selection="#{testController.selectedEmployees}" rowKey="#{emp.id}" 
rowSelectMode="checkbox"> 
         <p:columnGroup type="header"> 
         <p:row> 
          <p:column/> 
          <p:column headerText="ID"/> 
          <p:column headerText="Name"/> 
          <p:column headerText="Remarks"/> 
          <p:column headerText="Update"/> 
         </p:row> 
        </p:columnGroup> 
        <p:column selectionMode="multiple"/> 
        <p:column headerText="ID"> 
         <h:outputText value="#{emp.id}"/> 
        </p:column> 
        <p:column headerText="Name"> 
         <h:outputText value="#{emp.name}" id="name"/> 
        </p:column> 
        <p:column headerText="Remarks"> 
         <h:inputText id="inputT1" value="#{emp.remarks}"/> 
        </p:column> 
        <p:column headerText="Update"> 
         <p:commandButton id="updateCmd" title="Update" 
             actionListener="#{testController.updateRecord}"> 
         </p:commandButton> 
        </p:column> 
</p:dataTable> 

Und hier der Code-Methode ist:

public void updateRecord(ActionEvent actionEvent) { 
    FacesContext context = FacesContext.getCurrentInstance(); 
    Employee selectedRecord = context.getApplication().evaluateExpressionGet(context, "#{emp}", Employee.class); 
    selectedRecord.setRemarks("Updated"); 
    String name1=selectedRecord.getRemarks(); 
    System.out.println("name1"+name1); 
     // I need to update the row only or the cell with the remarks Updated by 
//without refreshing full dataTable 
    //RequestContext.getCurrentInstance().update("request:Employee"); 
//Above line will update the full table, I need only the row or the cell value 
    } 
+0

ist dies ein duiplicate: http://stackoverflow.com/questions/30120998/update-single-row-from-datatable-jsf-ajax – Kukeltje

+0

@Kukeltje zeigt es nicht die Antwort – 99maas

+0

In Ihrer XHTML-Seite kann ich sehen, es gibt nur ein Eingabefeld Bemerkungen. Aber in Ihrer Update-Methode aktualisieren Sie den Namen. Was versuchst du zu erreichen? – Unknown

Antwort

0

1) Sie update Attribut command verwenden können, um die Komponenten mit Ajax

Von aktualisieren Primefaces Dokumentation die Beschreibung für update Attribut ist

Komponente (n) mit Ajax aktualisiert werden.

So können Sie Ihre spezifische Spalte durch die Komponenten ID aktualisieren.

2) Wenn Sie die bestimmte Spalte mit Java aktualisieren möchten, müssen Sie die rowId an den Controller übergeben.

<h:form id="myform"> 
     <p:dataTable value="#{testController.employeeList}" id="Employee" 
        var="emp" widgetVar="employeeTable" rowIndexVar="row" 
        filteredValue="#{testController.filteredEmployees}" 
        rowKey="#{emp.id}"> 
        <p:column headerText="Id"> 
         <h:outputText value="#{emp.id}" /> 
        </p:column> 
        <p:column headerText="Name"> 
         <h:outputText value="#{emp.name}" id="name" /> 
        </p:column> 
        <p:column headerText="Remarks"> 
         <p:inputText id="inputT1" value="#{emp.remarks}"/> 
        </p:column> 
        <p:column headerText="Update" > 

        <p:commandButton id="updateCmd" title="Update" partialSubmit="true" 
            actionListener="#{testController.updateRecord}"> 
          <f:attribute name="rowId" value="#{row}" /> 
        </p:commandButton> 
        </p:column> 
     </p:dataTable> 

ActionListner Methode:

public void updateRecord(ActionEvent actionEvent) { 
     Integer rowId = (Integer)actionEvent.getComponent().getAttributes().get("rowId"); 
     FacesContext context = FacesContext.getCurrentInstance(); 
     Employee selectedRecord = context.getApplication().evaluateExpressionGet(context, "#{emp}", Employee.class); 
     selectedRecord.setRemarks("Updated"); 
     String name1=selectedRecord.getRemarks(); 
     System.out.println("name1"+name1); 
     RequestContext.getCurrentInstance().update("myform:Employee:"+rowId+":inputT1"); 
     } 
Verwandte Themen