【问题标题】:Copy & Paste the data from Excel to Datatable using JSF (Primefaces)使用 JSF (Primefaces) 将数据从 Excel 复制并粘贴到数据表
【发布时间】:2016-07-13 10:13:06
【问题描述】:

我想使用 JSF (Primefaces) 将数据从 Excel 复制并粘贴到数据表中。请建议我实现复制和粘贴的可能性。

【问题讨论】:

  • 如果您有东西请告诉我们。
  • 您想以编程方式从 Excel 工作表导入数据表还是手动复制和粘贴?
  • 我想手动复制粘贴到数据表中。
  • 如果我复制 Excel 文件的数据并将其粘贴到文本文件中,那么它们与列的标识没有区别,而不是我如何将其分解为数据表?因为我正在考虑编写 javascript 来获取粘贴文本区域的文本并将其转换为数据表。

标签: jsf primefaces datatable


【解决方案1】:

您可以监听 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 数据并填充 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);

    }
}

这只是一个例子,一个提示,它需要更多的工作才能正常工作。也许您需要一个自定义的 primefaces 对象来执行此操作或扩展 PF 数据表。

【讨论】:

  • 感谢分享代码。我会尝试上述方法并更新状态。再次感谢。
猜你喜欢
  • 1970-01-01
  • 2021-10-10
  • 1970-01-01
  • 1970-01-01
  • 2015-02-09
  • 2016-04-03
  • 2017-10-08
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多