【问题标题】:primefaces export data table dynamic columnsprimefaces 导出数据表动态列
【发布时间】:2014-04-14 18:28:26
【问题描述】:

我想为动态列添加导出功能。 我认为应该去。 Dynamic Columns Export Data

我使用了 Primefaces 的示例代码并对其进行了编辑:Primefaces Example 该代码有效,但数据不正确。 该文件包括动态数据,如data[i], data[i], ....,而不是 data[i] 中的属性。

有什么想法吗?

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
    <html xmlns="http://www.w3.org/1999/xhtml"
      xmlns:h="http://java.sun.com/jsf/html"
      xmlns:f="http://java.sun.com/jsf/core"
      xmlns:ui="http://java.sun.com/jsf/facelets" 
      xmlns:my="http://java.dynamic.list.de"
      xmlns:p="http://primefaces.org/ui">

<ui:composition template="META-INF/templates/Template.xhtml">
    <ui:define name="content">      
            <h:form id="form" enctype="multipart/form-data">    
              <h:panelGrid columns="3"> 
                  <h:selectOneMenu id="showColl" value= "#{searchBean.collList.currentColl}" rendered = "#{searchBean.search.visible}">
                    <f:selectItems value="#{searchBean.collList.collList}" />
                </h:selectOneMenu>

             <h:outputText value="#{msgs.collection}" rendered = "#{searchBean.search.hide}"></h:outputText>
             <h:outputText value="#{searchBean.collList.currentColl}" rendered = "#{searchBean.search.hide}"></h:outputText>
             <h:commandButton id="show" action="#{searchBean.showFieldList}" value="#{msgs.plus}" rendered="#{searchBean.search.visible}" style=""/>    
                          <h:commandButton id="hide" action="#{searchBean.hideFieldList}" value="#{msgs.minus}" rendered="#{searchBean.search.hide}" immediate="true" onchange="this.form.submit()" style=""/>                                   
             </h:panelGrid>
            <h:panelGrid columns="1" rendered="#{searchBean.search.hide}"> 
             <h:panelGrid columns="2"> 
                <h:outputLabel value="#{msgs.Attr}"></h:outputLabel> 
                 <h:selectOneMenu id="Field"                 
                             value="#{searchBean.collList.currentField}"
                             rendered="#{searchBean.search.readWrite}">
                             <f:selectItems
                               value="#{searchBean.collList.fieldList}" />
                          </h:selectOneMenu>
                           <h:outputText value="#{searchBean.collList.currentField}" rendered="#{searchBean.search.readOnly}"></h:outputText>   
             </h:panelGrid>

             <h:panelGrid columns="2"> 
                 <h:outputLabel value="#{msgs.value}"></h:outputLabel> 
                 <h:inputText value="#{searchBean.search.value}"  rendered = "#{searchBean.search.readWrite}"></h:inputText>    
                 <h:outputText value="#{searchBean.search.value}" rendered = "#{searchBean.search.readOnly}"></h:outputText>
             </h:panelGrid>
             <h:panelGrid columns="3">
              <h:outputText value="#{msgs.sort_Order}"/>
                         <h:selectOneRadio id="sortOrder" 
                                value="#{searchBean.search.ascendingData}"                         
                                immediate="true" onchange="this.form.submit()">
                                <f:selectItem itemLabel="#{msgs.ascending}" itemValue="a" itemDisabled="#{searchBean.search.readOnly}"/>
                                <f:selectItem itemLabel="#{msgs.descending}" itemValue="d" itemDisabled="#{searchBean.search.readOnly}"/>
                         </h:selectOneRadio>
            </h:panelGrid>   
            </h:panelGrid>       
             <h:commandButton id="search" action="#{searchBean.searchButton}" value="#{msgs.search}" style=""/>

    <p:dataTable id="datas" var="data" value="#{searchBean.readListMap.items}" style="width:150px"
                 scrollable="true" scrollWidth="800" scrollHeight="400" emptyMessage="Keine Daten vorhanden">  
        <p:columns value="#{searchBean.collList.fieldListColumns}" var="columnName" columnIndexVar="i" style="width:150px"  headerText="#{columnName}">         
            #{data[i]}
        </p:columns>  

    </p:dataTable>                           

        <h:commandLink>   
            <p:graphicImage library="images" name="csv.png" /> 
            <p:dataExporter type="csv" target="datas" fileName="assetDB" />  
        </h:commandLink>  

        <h:commandLink>  
            <p:graphicImage library="images" name="xml.png" /> 
            <p:dataExporter type="xml" target="datas" fileName="assetDB" />  
        </h:commandLink>  

    </h:form>                
    </ui:define>
</ui:composition>
</html>

【问题讨论】:

  • 请显示您的 xhtml 页面。
  • 您使用的是什么版本的 primefaces?无论如何,你需要使用 CustomExporter 来做你想做的事。
  • 我使用 primefaces 4.0。我想我需要一个 CustomExporter。问题是,我有一个 NoSQL 数据库。这意味着我的数据没有 Shema,例如不同的列。这就是我使用动态列的原因。我在我的数据表中创建了我的数据的导出我有空列,因为数据没有他的列。但是,如果我在 cvs 中导出数据,我有一个包含所有列的标题行,其余行是数据。我只能为我的数据库中的一个模式创建导出。我需要不同的导出 cvs 文件用于不同的 shemas。我的想法对吗?
  • 导入相同列的数据。我可以像用动态列构建表格一样。不同的是我不填写表格,而是填写字符串,例如字符串生成器来创建我的导出文件。

标签: jsf-2 primefaces


【解决方案1】:

我使用此代码创建文件。 结果我是一个 StringBuilder 来创建你的服装字符串。我创建了一个特定的 cvs 文件。

String tempString = result.toString();
InputStream stream = new ByteArrayInputStream(tempString.getBytes("UTF-8"));
Timestamp tstamp = new Timestamp(System.currentTimeMillis()); 
file = new DefaultStreamedContent(stream, "application/cvs", "test-"+tstamp+".cvs"); 

我在 xhtml 文件中写了来自 primefaces Primefaces example 的示例。希望这可以帮助其他人在导出数据时遇到动态列和primefaces的问题。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-10-23
    • 2013-02-17
    • 1970-01-01
    • 2014-05-26
    • 2013-11-22
    • 2014-02-15
    • 2013-02-11
    • 1970-01-01
    相关资源
    最近更新 更多