Primefaces Exporter Data type convert - primefaces

We are using PrimeFaces http://www.primefaces.org/ to export data in different format, pdf,excel ...
but in Excel we got a issue with the data type, for example if the the data is Integer in the Excel document the value appears how String and the viewer suggest change the value to number
how could we change the Data type in the exporter process ?
Code
<p:dataTable value="#{reportsBean.data}" var="reportResultRec" widgetVar="resultWidgetVar" id="reportsResultId" paginator="true" rows="32" binding="#{reportsBean.dataTable}" >
<f:facet name="header">
<h:outputText value="Usage report"/>
</f:facet>
<p:column width="37%" styleClass="tdTreeStyle">
<f:facet name="header">
<h:outputText value="Titles"/>
</f:facet>
<h:outputText value="#{reportResultRec.Name}"/>
</p:column>
<p:column width="25%" styleClass="tdTreeStyle">
<f:facet name="header">
<h:outputText value="Full Name"/>
</f:facet>
<h:outputText value="#{reportResultRec.fullName}"/>
</p:column>
<p:column width="13%" styleClass="tdTreeStyle">
<f:facet name="header">
<h:outputText value="Updated Date"/>
</f:facet>
<h:outputText value="#{reportResultRec.Timestamp}">
<f:convertDateTime pattern="MM/dd/YY"/>
</h:outputText>
</p:column>
<p:column width="10%" styleClass="tdTreeStyle">
<f:facet name="header">
<h:outputText value="View Count"/>
</f:facet>
<h:outputText value="#{reportResultRec.viewCount}"/>
</p:column>
<p:column width="15%" styleClass="tdTreeStyle">
<f:facet name="header">
<h:outputText value="Recall Status"/>
</f:facet>
</p:column>
</p:dataTable>
<p:commandButton value="Export as Excel" ajax="false">
<p:dataExporter type="pdf" pageOnly="true" target="reportsResultId" fileName="Report"/>
</p:commandButton>
the reportResultRec.viewCount is convert to String and it is Integer and on the Excel viewer suggest change to Number

Related

Why Prime Faces Data Table sorting not working

I am new to prime faces and want to sort a data table using sort by and attributes but the table is not being sorted. I am using 5.3 PF.
<p:dataTable id="myTable"
styleClass="standardTable marginTopFive paddingBottom"
value="#{User.users}" paginator="true"
paginatorTemplate="{CurrentPageReport} {FirstPageLink} {PreviousPageLink} {PageLinks} {NextPageLink} {LastPageLink} {RowsPerPageDropdown}"
paginatorPosition="bottom" rows="10" var="user"
emptyMessage="Error"
sortBy="#{user.userId}" sortOrder="descending">
<f:facet name="spacer">
<f:verbatim>
</f:verbatim>
</f:facet>
<f:facet name="footer">
</f:facet>
<p:column width="8%">
<f:facet name="header">
</f:facet>
<h:column>
<h:selectBooleanCheckbox
value="#{user.checked[user.userId]}" />
</h:column>
</p:column>
<p:column width="20%" sortBy="#{mpc.name}">
<f:facet name="header">
<h:outputText
value="User Name" />
</f:facet>
<h:outputText value="#{user.user_name}" />
</p:column>
<p:column width="30%" sortBy="#{mpc.email}">
<f:facet name="header">
<h:outputText
value="Email" />
</f:facet>
<h:outputText value="#{user.user_email}" />
</p:column>
</p:dataTable>
You set the name of the iterator variable as var="user", but here <p:column sortBy="#{mpc.name}"/> you called it as mpc.
So you must replace <p:column sortBy="#{mpc.name}"/> with <p:column sortBy="#{user.user_name}"/> and <p:column sortBy="#{mpc.email}"> with <p:column sortBy="#{user.user_email}">

Primefaces dataTable cannot edit after tab changed

Originally I used an editable dataTable, and it worked fine.
Then I put the dataTable in a dymanic tabView's tabs, then in the first rendered tab workes fine, but after I change tab, I cannot edit cells.
PrimeFaces version: 6.0
<p:tabView value="#{tippingViewBean.rounds}" var="round" dynamic="true">
<p:tab title="#{round}.">
<p:dataTable id="tippingTable#{round}" rowIndexVar="rowId" editable="true" editMode="cell"
widgetVar="cellTips"
var="userTip" value="#{tippingViewBean.getUserTips(round)}"
resizableColumns="true">
<p:ajax event="cellEdit" listener="#{tippingViewBean.addTip(userTip)}"/>
<p:column headerText="Kezdés">
<h:outputText value="#{userTip.schedule.date}"/>
</p:column>
<p:column headerText="Hazai Csapat">
<h:outputText value="#{userTip.schedule.homeTeam.name}"/>
</p:column>
<p:column headerText="Vendég Cspat">
<h:outputText value="#{userTip.schedule.awayTeam.name}"/>
</p:column>
<p:column headerText="Győztes">
<p:cellEditor>
<f:facet name="output"><h:outputText value="#{userTip.winnerTip}"/></f:facet>
<f:facet name="input">
<p:selectOneMenu id="winnerTipInput#{round}"
disabled="#{tippingViewBean.tipIsClosed(userTip)}"
value="#{tippingViewBean.winnerTip}" style="width: 100%">
<f:selectItems value="#{tippingViewBean.winnerTipForSelection}" var="selectItem"
itemLabel="#{selectItem}" itemValue="#{selectItem}"/>
</p:selectOneMenu>
</f:facet>
</p:cellEditor>
</p:column>
<p:column headerText="2,5 Gól alatt/felett">
<p:cellEditor>
<f:facet name="output"><h:outputText value="#{userTip.twoAndHalfTip}"/></f:facet>
<f:facet name="input">
<p:selectOneMenu id="goalsTipInput#{round}"
disabled="#{tippingViewBean.tipIsClosed(userTip)}"
value="#{tippingViewBean.goalsTip}" style="width: 100%">
<f:selectItems value="#{tippingViewBean.goalsTipForSelection}" var="goalsSelectItem"
itemLabel="#{goalsSelectItem}" itemValue="#{goalsSelectItem}"/>
</p:selectOneMenu>
</f:facet>
</p:cellEditor>
</p:column>
</p:dataTable>
</p:tab>
</p:tabView>
What I'm doing wrong?
Ok, I found the answer.
I changed the dataTable's widgetVar to unique ( cellTips#{round} ), and it works.

Primefaces Data Exporter : Exporting data issue

I have an List of List. lets say student and address. one to many relationship. In my data table there are 3 columns for the Name, Surname, Age related to the Student and In a single column I need to show address with concatenating the following fields like, address1, address2, city, country.Now I need to export this table by using <p:dataExporter>. When I try to export as Excel the corresponding column of Address is exported as Object (org.primefaces.uirepeat. blah blah..)
My code is
<p:dataTable value="#{manager.studentList}" var="item" id="studentData">
<p:column>
<f:facet name="header">Name</f:facet>
<h:outputText value="#{item.name}" />
</p:column>
<p:column>
<f:facet name="header">Surname</f:facet>
<h:outputText value="#{item.surname}" />
</p:column>
<p:column>
<f:facet name="header">Age</f:facet>
<h:outputText value="#{item.age}" />
</p:column>
<p:column>
<f:facet name="header">Address</f:facet>
<ui:repeat value="#{studentBean.addressList}" var="address">
<h:outputText value="#{address.address1}" /> <br />
<h:outputText value="#{address.address2}" /> <br />
<h:outputText value="#{address.city}" /> <br />
<h:outputText value="#{address.country}" />
</ui:repeat>
</p:column>
</p:dataTable>
<h:commandLink>
<p:graphicImage name="/images/excel.png" />
<p:dataExporter type="xls" target="studentData" fileName="studentdetails" pageOnly="true"/>
</h:commandLink>
Suggest me some way to export. even I tried with c:forEach and columns.
<p:dataTable value="#{manager.studentList}" rowIndexVar="index" var="item" id="studentData">
<p:column>
<f:facet name="header">Name</f:facet>
<h:outputText value="#{item.name}" />
</p:column>
<p:column>
<f:facet name="header">Surname</f:facet>
<h:outputText value="#{item.surname}" />
</p:column>
<p:column>
<f:facet name="header">Age</f:facet>
<h:outputText value="#{item.age}" />
</p:column>
<p:column>
<f:facet name="header">Address</f:facet>
<c:forEach var="address" items="#{studentBean.addressList.get(index).address}">
<h:outputText value="#{address.address1}" />,
<h:outputText value="#{address.address2}"/>,
<h:outputText value="#{address.city}" />,
<h:outputText value="#{address.country}" />
</c:forEach>
</p:column>
</p:dataTable>
<h:commandLink>
<p:graphicImage name="/images/excel.png" />
<p:dataExporter type="xls" target="studentData" fileName="studentdetails" pageOnly="true"/>
</h:commandLink>
i trying with c:forEach is ok

export text then datalist in excel and pdf with dataexporter

I am using primefaces 3.4.2 jar. I have a datatable with four columns. In two columns I have a datalist and I want to export text showed by datalist. But when I export it, it shows the following "org.primefaces.component.datalist.DataList#1195cc3" in the pdf and xls file.
<p:dataTable emptyMessage="#{messages['empty.result.set']}" id="searchResult" var="row" value="#{managePessoaJuridica.manageableList}" rows="10" paginator="true" paginatorPosition="top" paginatorAlwaysVisible="false" style="display:#{managePessoaJuridica.manageableList == null? 'none': ''}">
<p:column styleClass="column_icons" exportable="false">
<p:panelGrid columns="#{pessoaJuridicaController.showSelectAction?3:2}">
<p:commandButton id="selectAction" icon="ui-icon-circle-check" title="#{messages['action.select']}" action="#{pessoaJuridicaController.select(row.id)}" immediate="true" process="#this" rendered="#{pessoaJuridicaController.showSelectAction}"/>
<p:commandButton id="editAction" icon="ui-icon-pencil" title="#{messages['action.edit']}" action="#{pessoaJuridicaController.load(row.id)}" immediate="true" process="#this" update="#form"/>
<p:commandButton id="deleteAction" icon="ui-icon-trash" title="#{messages['action.delete']}" action="#{pessoaJuridicaController.delete(row.id)}" immediate="true" process="#this" update="searchResult"
onclick="return confirm('#{messages['confirm.delete.this']} #{messages['pessoa.juridica.view.title']}');" />
</p:panelGrid>
</p:column>
<p:column id="column_nome" sortBy="#{row.nome}" >
<f:facet name="header">
<h:outputText id="columnHeader_nome" value="#{messages['pessoa.nome']}"/>
</f:facet>
<h:outputText id="nome" value="#{row.nome}">
</h:outputText>
</p:column>
<p:column style="width:0px;">
<f:facet name="header">
<h:outputText id="columnHeader_categoriasPessoa" value="#{messages['pessoa.categorias.pessoa']}"/>
</f:facet>
<p:dataList type="definition" id="categoriasPessoa" var="item" value="#{row.categoriasPessoa}" >
<p:column>
<h:outputText id="item_categoriasPessoa" value="#{item}" converter="com.domain.configuracao.crud.CategoriaPessoaJsfConverter"/>
</p:column>
</p:dataList>
</p:column>
<p:column style="width:0px;">
<f:facet name="header">
<h:outputText id="columnHeader_identificacoesPessoa" value="#{messages['pessoa.identificacoes.pessoa']}"/>
</f:facet>
<p:dataList type="definition" id="identificacoesPessoa" var="item" value="#{row.identificacoesPessoa}">
<p:column>
<h:outputText id="item_categoriaIdentificacoes" value="#{pessoaJuridicaController.getCategoriaIdentificacao(item)}" converter="com.domain.configuracao.crud.CategoriaIdentificacaoJsfConverter"/>:
<h:outputText id="item_identificacoesPessoa" value="#{item}" converter="com.domain.configuracao.crud.IdentificacaoPessoaJsfConverter"/>
</p:column>
</p:dataList>
</p:column>
<p:column id="column_ativo" sortBy="#{row.ativo}" >
<f:facet name="header">
<h:outputText id="columnHeader_ativo" value="#{messages['classe.base.cadastro.ativo']}" />
</f:facet>
<h:outputText id="ativo" value="#{row.ativo}" converter="com.BooleanJsfConverter" >
</h:outputText>
</p:column>
<f:facet name="footer">
<p:menuButton value="#{messages['export.action']}" rendered="#{not empty managePessoaJuridica.manageableList}">
<p:menuitem value="#{messages['export.spreadsheet']}" ajax="false">
<p:dataExporter type="xls" target="searchResult" fileName="export" excludeColumns="0" encoding="ISO-8859-1"/>
</p:menuitem>
<p:menuitem value="#{messages['export.pdf']}" ajax="false">
<pe:exporter type="pdf" target="searchResult" fileName="export" excludeColumns="0" encoding="ISO-8859-1"/>
</p:menuitem>
<p:menuitem value="#{messages['export.csv']}" ajax="false">
<p:dataExporter type="csv" target="searchResult" fileName="export" excludeColumns="0" encoding="ISO-8859-1"/>
</p:menuitem>
</p:menuButton>
<p:spacer width="10"/>
<h:outputText value="#{fn:length(managePessoaJuridica.manageableList)} #{messages['records.found']}" rendered="#{not empty managePessoaJuridica.manageableList}"/>
</f:facet>
</p:dataTable>
But when I export it, it shows the following
"org.primefaces.component.datalist.DataList#1195cc3" in the pdf and
xls file.
Obviously, Primefaces's data exporter use the toString() method of an object to print its "value(s)".
Suggestions :
Write a custom exporter (recommended)
Override toString() method of org.primefaces.component.datalist.DataList (not advised)

call a method after the execution of the filtering of primefaces datatable

I have this datatable:
<p:dataTable id="tabla_gral" rendered="#{consumoMaterial.verTabla}" var="item" paginator="true" rows="15" rowKey="#{item.no}" value="#{consumoMaterial.listadoConsumo}" filteredValue="#{consumoMaterial.listadoConsumoFiltered}">
<p:ajax event="filter" listener="#{consumoMaterial.actualizarSaldos}" update=":form2:tabla_gral"/>
<f:facet name="header">
<h:outputText value="Búsqueda de Consumo por: #{consumoMaterial.tipoBuscar}: '#{consumoMaterial.codigo}'"/>
</f:facet>
<p:column exportable="#{consumoMaterial.no}" rendered="#{consumoMaterial.no}" id="cclave" sortBy="#{item.no}" filterBy="#{item.no}" filterMatchMode="contains">
<f:facet name="header">
<h:outputText value="Nro"/>
</f:facet>
<h:outputText value="#{item.no}"/>
</p:column>
<p:column exportable="#{consumoMaterial.centroCosto}" rendered="#{consumoMaterial.centroCosto}" id="cconcepto" sortBy="#{item.centroCosto}" filterBy="#{item.centroCosto}" filterMatchMode="contains">
<f:facet name="header">
<h:outputText value="Centro de Costo"/>
</f:facet>
<h:outputText value="#{item.centroCosto}"/>
</p:column>
<p:column exportable="#{consumoMaterial.codigoAlmacen}" rendered="#{consumoMaterial.codigoAlmacen}" id="ctipo" sortBy="#{item.codigoAlmacen}" filterBy="#{item.codigoAlmacen}" filterMatchMode="contains">
<f:facet name="header">
<h:outputText value="Almacén"/>
</f:facet>
<h:outputText value="#{item.codigoAlmacen}"/>
</p:column> </p:dataTable>
I want to call a method after the execution of the filtering of primefaces datatable,
I tested with
<p:ajax event="filter" listener="#{consumoMaterial.actualizarSaldos}" update=":form2:tabla_gral"/>
but when call actualizarSaldos listadoConsumoFiltered is null.