2016-07-13 12 views
0

コピーします& JSF(Primefaces)を使用してデータをExcelからDatatableに貼り付けます。私にコピー&ペーストを達成する可能性を示唆してください。JSF(Primefaces)を使用してExcelからDatatableにデータをコピー&ペーストします

+0

あなたが何かを持っているかどうかをお知らせください。 –

+0

Excelシートからデータシートにプログラムでインポートするか、手動でコピー&ペーストしますか? – Tiny

+0

データテーブルに手動でコピー&ペーストしたいです。 – Mahendiran

答えて

4

dataTable primefacesオブジェクトのpasteイベントをリッスンし、イベントオブジェクトからクリップボードデータを取得し、JSONオブジェクト(JSONArrayを使用した例)にデータをフォーマットして、remoteCommand経由でbackingBeanに送信できます。

XHTML:あなたのremoteCommandアクションデコードJSONデータで

<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> 

とのdataTableデータプロバイダを取り込みます。表のデータは、2つのプロパティ(col1およびcol2)を持つJavaオブジェクトのみです。

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); 

    } 
} 

これは一例に過ぎず、ヒント、それが正常に動作するように多くの作業を必要とします。 PFデータテーブルを拡張したり拡張したりするために、カスタムプライムオブジェクトが必要なのかもしれません。

+0

上記のコードを共有していただきありがとうございます。上記の方法を試して、stausを更新してください。再度、感謝します。 – Mahendiran

+0

上記のアプローチはうまくいきます。ありがとう – Mahendiran

関連する問題