2013年11月7日 星期四

Liferay中,把searchContainer的內容輸出excel的方法(liferay Export Excel)



今天遇到的需求




畫面上有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)就是左上角第一格
//而以下程式碼都在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> ){
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();


}






沒有留言:

張貼留言