今天遇到的需求
畫面上有liferay search container
若我們要把SearchContainer的內容輸出成excel
看似簡單的需求
其實解法到最後也沒有多難XDD
不過確實琢磨了點時間
1.
在 liferay-plugin-package.properties中,點add然後增加poi.jar
這樣我們就可以在JAVA中使用poi套件
2.
網頁上的<liferay-ui:search-container-results>,當你使用時一定會有個results要設定
例如:
results=List<something>;
我們在這個部份多做一件事情
results=List<something>;
total= List<something>.size();
portletSession.setAttribute("yourparameter", List<something>);
3.
在JSP頁面中
放入
<portlet:resourceURL var="packURL">
<portlet:param name="yourParameterName" value="yourValue" />
</portlet:resourceURL>
把這個URL放在你要的功能上,例如
<a:href="<%=packURL %>"></a>
4.
當使用者在前端點該超連結會啟動在Portlet的 JAVA中的方法
我們覆寫他
@Override
public void serveResource(ResourceRequest resourceRequest,
ResourceResponse resourceResponse){
//取得我們剛剛放的List值
PortletSession session = resourceRequest.getPortletSession();
List<User> mappingList = (List<User>) session.getAttribute("results");
try {
//生成Excell檔案
resourceResponse.setContentType("application/vnd.ms-excel");
resourceResponse.addProperty(
HttpHeaders.CONTENT_DISPOSITION, "attachment; filename=OutPutExcel.xls"//這裡是命名excel
);
Workbook wb = new HSSFWorkbook();//產生excel物件
OutputStream fileOut = resourceResponse.getPortletOutputStream();//取得輸出串流
Sheet sheet = wb.createSheet("ExcelSheetName");//Excel頁籤名稱
Row row = sheet.createRow(0);//產生第一行,所以第一行就是row
//在第一行createCell(0)就是左上角第一格
List<User> mappingList = (List<User>) session.getAttribute("results");
try {
//生成Excell檔案
resourceResponse.setContentType("application/vnd.ms-excel");
resourceResponse.addProperty(
HttpHeaders.CONTENT_DISPOSITION, "attachment; filename=OutPutExcel.xls"//這裡是命名excel
);
Workbook wb = new HSSFWorkbook();//產生excel物件
OutputStream fileOut = resourceResponse.getPortletOutputStream();//取得輸出串流
Sheet sheet = wb.createSheet("ExcelSheetName");//Excel頁籤名稱
Row row = sheet.createRow(0);//產生第一行,所以第一行就是row
//在第一行createCell(0)就是左上角第一格
//而以下程式碼都在row中setValue,相當於製作表頭的意思
//然後我們就可以動態新增所有的欄位了
row.createCell(0).setCellValue("class");
row.createCell(1).setCellValue("studentID");
row.createCell(2).setCellValue("name");
int i=1;//第0行是表頭所以從1開始
for(Something sm:List<Something> ){
for(Something sm:List<Something> ){
Row dataRow = sheet.createRow(i)
dataRow.createCell(0).setCellValue("studentID");
dataRow.createCell(1).setCellValue("studentID");
dataRow.createCell(2).setCellValue("studentID");
..........
........
.........
//以下省略
i++;
}
}
wb.write(fileOut);
fileOut.flush();
fileOut.close();
}
沒有留言:
張貼留言