我想导出有一个SelectOneMenu的<p:dataTable>
,如下例所示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
我的数据表代码是这样的:
<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>
我不确定你能做到这一点与dataexporters,但是你可以实现你自己的出口商,这很容易,你只需要Apache POI。
示例:放置在小面板中的按钮。
<p:commandButton icon="ui-icon-arrowstop-1-s" value="XLS" onclick="PrimeFaces.monitorDownload(start, stop)">
<p:fileDownload value="#{dataExporter.generateXLS()}" />
</p:commandButton >
一个请求作用域的托管bean(但是你也可以实现一个webservlet)
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);
}
免责声明:未经测试,您需要使用自己的对象和实体来调整代码。