使用JSF(Primefaces)将数据从Excel复制并粘贴到Datatable

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了使用JSF(Primefaces)将数据从Excel复制并粘贴到Datatable相关的知识,希望对你有一定的参考价值。

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

答案

您可以侦听dataTable primefaces对象的粘贴事件并从事件对象获取剪贴板数据,将数据格式化为JSONobject(在我使用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("
"), function(i, r){
                        table[i] = r.split("	");
                    });

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

以上是关于使用JSF(Primefaces)将数据从Excel复制并粘贴到Datatable的主要内容,如果未能解决你的问题,请参考以下文章

从当前行数据表中获取 id 以链接 JSF Primefaces Java [重复]

如何从jsf / primefaces中的托管bean向页面添加组件[重复]

使用ajax从jsf中的primefaces树选定项设置primefaces selectOneMenu默认值

JSF 2.0 无法从 primefaces 呈现对话框

从支持 Bean 刷新 JSF/PrimeFaces 接口

JSF / PrimeFaces使用selectOneMenu将列表中的项目关联起来