2016-07-13 77 views

回答

4

您可以偵聽dataTable primefaces對象的粘貼事件,並從事件對象獲取剪貼板數據,將數據格式化爲JSON對象(在我使用JSONArray的示例中),通過remoteCommand將其發送到backingBean。

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> 

在你remoteCommand行動解碼JSON數據和填充數據表的數據提供商。表數據只是具有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); 

    } 
} 

這僅僅是一個例子,一個暗示,它需要更多的工作才能正常工作。也許你需要一個自定義的primefaces對象來完成或擴展PF數據表。

+0

感謝分享code.i'll嘗試以上方法並更新staus。再次感謝。 – Mahendiran

+0

以上方法工作正常。謝謝 – Mahendiran

相關問題