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)
Antwort
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 && data.items && 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.
Vielen Dank für die Freigabe des Codes. Ich werde den obigen Ansatz versuchen und den Status aktualisieren. Danke noch einmal. – Mahendiran
Der obige Ansatz funktioniert gut. Vielen Dank – Mahendiran
lassen Sie uns wissen, wenn Sie etwas haben. –
Möchten Sie aus einem Excel-Blatt programmatisch in eine Datentabelle importieren oder manuell kopieren und einfügen? – Tiny
Ich möchte manuell in die Datentabelle kopieren und einfügen. – Mahendiran