2016-07-13 17 views
0

ich möchte kopieren & Fügen Sie die Daten aus Excel zu Datatable mit JSF (Primefaces). bitte schlagen Sie mir eine Möglichkeit vor, Kopie & Paste zu erreichen.Kopieren und Einfügen der Daten von Excel in Datatable mit JSF (Primefaces)

+0

lassen Sie uns wissen, wenn Sie etwas haben. –

+0

Möchten Sie aus einem Excel-Blatt programmatisch in eine Datentabelle importieren oder manuell kopieren und einfügen? – Tiny

+0

Ich möchte manuell in die Datentabelle kopieren und einfügen. – Mahendiran

Antwort

4

Sie können ein Einfügeereignis des dataTable-primefaces-Objekts anhören und die Zwischenablagedaten aus dem Ereignisobjekt abrufen, die Daten in ein JSON-Objekt formatieren (im Beispiel habe ich ein JSONArray verwendet), um es per remoteCommand an eine backingBean zu senden.

xhtml:

<p:remoteCommand name="updateData" process="@this" action="#{backingBean.updateData()}" update="dt" /> 

<p:dataTable widgetVar="dt" id="dt" value="#{backingBean.data}" var="d"> 
    <p:column headerText="column 1"> 
     <p:outputLabel value="#{d.col1}" /> 
    </p:column> 
    <p:column headerText="column 2"> 
     <p:outputLabel value="#{d.col2}" /> 
    </p:column> 
</p:dataTable> 

<h:outputScript> 
    $(function(){ 
     PF('dt').jq.on("paste", function(e){ 
      var data = e.originalEvent.clipboardData; 
      var table = []; 
      if(data &amp;&amp; data.items &amp;&amp; data.items[0]) { 

       data.items[0].getAsString(function(text){ 

        $.each(text.split("\n"), function(i, r){ 
         table[i] = r.split("\t"); 
        }); 

        updateData([{name: 'data', value: JSON.stringify(table) }]); 
       }); 
      } 
     }); 

    }); 
</h:outputScript> 

In Ihrem Remotecommand Aktion dekodieren die JSON-Daten, und füllen Sie die Datatable Datenprovider. Tabellendaten sind nur ein Java-Objekt mit 2 Eigenschaften (Spalte1 und Spalte2).

BackingBean:

private List<TableData> data; 

public List<TableData> getData() { 
    return data; 
} 

public void setData(List<TableData> data) { 
    this.data = data; 
} 

public void updateData(){ 
    Map<String, String> paramValues = FacesContext.getCurrentInstance().getExternalContext().getRequestParameterMap(); 
    String json = paramValues.get("data"); 
    JSONArray table = new JSONArray(json); 
    data = new ArrayList<>(); 
    for (int i = 0; i < table.length(); i++){ 
     JSONArray row = table.getJSONArray(i); 
     TableData t = new TableData(); 

     for (int j = 0; j < row.length(); j++){ 
      String o = row.getString(j); 
      if (j == 0){ 
       t.setCol1(o); 
      } else { 
       t.setCol2(o); 
      } 
     } 

     data.add(t); 

    } 
} 

Dies ist nur ein Beispiel, ein Hinweis, braucht es mehr Arbeit richtig zu arbeiten. Vielleicht benötigen Sie dafür ein eigenes primefaces -Objekt oder erweitern Sie die PF dataTable.

+0

Vielen Dank für die Freigabe des Codes. Ich werde den obigen Ansatz versuchen und den Status aktualisieren. Danke noch einmal. – Mahendiran

+0

Der obige Ansatz funktioniert gut. Vielen Dank – Mahendiran