Проблема с Primefaces p:dataExporter, который экспортирует DataTable с SelectOneMenu не так, как ожидалось?
Я хочу экспортировать <p:dataTable>
который имеет SelectOneMenu, как показано в этом примере JSF Primefaces SelectOneMenu
Итак, я использовал простые лица <p:dataExporter type="xls" target="datatbleId" fileName="cars"/>
который generated a xls file
как приведенный ниже формат:
------------------------------------
Name | Car
----------------------------------------
ABC | 1
DDD | 2
Что я должен делать? Так что я могу генерировать xls
в следующем формате:
------------------------------------
Name | Car
----------------------------------------
ABC | Toyota
DDD | Ford
Мой код DataTable выглядит следующим образом:
<p:dataTable id="studentDtble" var="studentDetail" value="#{studentController.studentList}" emptyMessage="No records found">
<p:column styleClass="ralign">
<f:facet name="header">
<h:outputText value="Student Id " />
</f:facet>
<p:commandLink id="studentCmdLnk" action="#{profileHandler.showStudentProfile}" update=":tabView:loanOvrviewForm">
<h:outputText id="studentIdOutTxt" value="#{studentDetail.studentId}" />
</p:commandLink>
</p:column>
<p:column>
<f:facet name="header">
<h:outputText value="Class" />
</f:facet>
<h:outputText id="classoutTxt" value="#{studentDetail.class}" />
</p:column>
<p:column>
<f:facet name="header">
<h:outputText value="Student Name" />
</f:facet>
<h:outputText id="nameoutTxt" value="#{studentDetail.studentName}" />
</p:column>
<p:column>
<f:facet name="header">
<h:outputText value="Contact No" />
</f:facet>
<h:inputText id="contactInTxt" value="#{studentDetail.studentContact}" />
</p:column>
<p:column>
<f:facet name="header">
<h:outputText value="DOJ" />
</f:facet>
<h:outputText id="dojDateOutTxt" value="#{studentDetail.dojDate}">
<f:convertDateTime pattern="MM/dd/yyyy" />
</h:outputText>
</p:column>
<p:column>
<f:facet name="header">
<h:outputText value="Group/Branch" />
</f:facet>
<p:selectOneMenu id="branchesLstBox" value="#{studentDetail.branchList.branchId}">
<f:selectItems value="#{studentController.getAllBranches()}" var="branches" itemValue="#{branches.branchId}" itemLabel="#{branches.branchName}" />
</p:selectOneMenu>
</p:column>
<p:column>
<f:facet name="header">
<h:outputText value="Remarks" />
</f:facet>
<p:inputText id="remarksInTxt" value="#{studentDetail.remarks}" />
</p:column>
</p:dataTable>
1 ответ
Я не уверен, что вы можете сделать это с помощью dataExporter, однако вы можете реализовать свой собственный экспортер, это довольно просто, вам просто нужен Apache POI.
Образец:
Кнопка, чтобы вставить в лицевой.
<p:commandButton icon="ui-icon-arrowstop-1-s" value="XLS" onclick="PrimeFaces.monitorDownload(start, stop)">
<p:fileDownload value="#{dataExporter.generateXLS()}" />
</p:commandButton >
Управляемый компонент в области запроса (но вы также можете реализовать веб-сервлет)
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.net.URLConnection;
import java.util.List;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.RequestScoped;
import org.apache.poi.xssf.usermodel.XSSFSheet;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;
import org.primefaces.model.DefaultStreamedContent;
import org.primefaces.model.StreamedContent;
@ManagedBean(name="dataExporter")
@RequestScoped
public class DataExporter {
public StreamedContent generateXLS() {
if (list != null) { // the list you are using in the data Table
if (!list.isEmpty()) {
String filePath = "E:\\tmp\\";
String fileName = "xlsFile";
String a = filePath + fileName;
XSSFWorkbook new_workbook = new XSSFWorkbook();
XSSFSheet sheet = new_workbook.createSheet("SAMPLE");
int cellnum = 0;
int rownum = 0 ;
Row row = sheet.createRow(0);
for (Object object : list) { //loop through the data and add them to the cell
row = sheet.createRow(rownum++);
cellnum = 0;
cell = row.createCell(cellnum++);
if (object.getColumn1() == null) {
cell.setCellValue("");
} else {
cell.setCellValue(object.getColumn1());
}
cell = row.createCell(cellnum++);
if (object.getColumn2() == null) {
cell.setCellValue("");
} else {
cell.setCellValue(object.getColumn2());
}
}
FileOutputStream output_file = null;
try {
output_file = new FileOutputStream(new File(a));
} catch (FileNotFoundException ex) {
}
try {
new_workbook.write(output_file);
} catch (IOException ex) {
}
try {
output_file.close(); //close the file
} catch (IOException ex) {
}
FileInputStream fis = null;
try {
fis = new FileInputStream(a);
} catch (FileNotFoundException ex) {
}
InputStream is = fis;
String mimeType = "";
try {
mimeType = URLConnection.guessContentTypeFromStream(is);
} catch (IOException ex) {
}
return new DefaultStreamedContent(is, mimeType, fileName);
}
Отказ от ответственности: не проверено, и вам нужно адаптировать код с вашими собственными объектами и объектами.