Tag Archives: Java

POI 列印 Excel 的小技巧

1. 利用 jdk 6 新的 API java.awt.Desktop 列印

以 excel 為例,這個 API 會啟動目前的平台已經登記處理 xls 檔案的程式來列印指定的檔案,sample code 如下:

if ( Desktop.isDesktopSupported() ) {
Desktop desktop=Desktop.getDesktop();
if ( desktop.isSupported(Desktop.Action.PRINT) ) {
desktop.print(excelFile);
}
} else {
System.out.println(“debug: desktop not supported!”);
}

2. 列印 excel 檔案內所有的工作表

利用以上方法列印時,通常只會印出 excel 檔的第一個工作表,如果要印出所有工作表可以利用org.apache.poi.hssf.usermodel.HSSFSheet 的 setSelected method,例如

for(int i=1;i<sheetCount;i++) {

workbook.getSheetAt(i).setSelected(true);

}

1 Star2 Stars3 Stars4 Stars5 Stars (No Ratings Yet)
Loading...

ognl.MethodFailedException: Method “setQty” failed for object com.amjet.sales.model.Order

最近寫一個 struts2 action 傳回 json 資料,測試時發生上面的錯誤。原因是頁面的 jquery 元件透過 post method 送出 “order.qty” 的參數,struts2 的 interceptor 在收到參數後想要設定 action 內 order 物件的 qty property,事實上我不需要 struts2 作 parse 參數及設定物件的動作,參數我想在 action 內用 request.getParameter() 自己接取處理。以下的 action 設定範例可以讓 interceptor 忽略開頭為 order 的參數,由於 struts2 預設也會忽略開頭為 dojo,struts 的參數,我們也一併保留:

<action name=”updateSell” method=”jsonUpdate”
class=”com.amjet.sales.web.action.SellAction”>
<interceptor-ref name=”defaultStack”>
<param name=”params.excludeParams”>^order\..*,dojo\..*,^struts\..*</param>
</interceptor-ref>

<result type=”json”>
<param name=”target”>jquery</param>
</result>
</action>

1 Star2 Stars3 Stars4 Stars5 Stars (1 votes, average: 3.00 out of 5)
Loading...

java form submit 中文亂碼問題

這個問題陸續遇到幾次了,始終知其然而不知其所以然。這是最近一次的處理案例:

環境

OS: CentOS 5.2 (utf-8)

Database: MySQL 5 (utf-8)

Application server: Tomcat 6

網頁

<input type=text name=keyword>

程式

String keyword=request.getParameter(“keyword”);

網頁的 input 輸入中文 submit 後由以上程式碼接取,原本的中文都變成亂碼。解決的方法是改用以下的接取程式碼,將收到的字串重新編碼。

String keyword=new String(request.getParameter(“keyword”).getBytes(“iso8859-1″),”utf-8”);

Why

Tomcat 在處理 GET、POST 參數時預設是採用 ISO-8859-1 編碼,請參考此 網址 URIEncoding 部份的說明,所以第2 段程式才會 work,請隨著您的作業系統及資料庫編碼設定,調整接取參數的程式碼。

Browser

以上的例子是送一個 keyword 到 tomcat web application 查詢資料,後來出現另一個問題,從 Firefox 送出中文的 keyword 可以正確的查到資料,Explorer 卻查不到,經過測試和查詢相關資料後發現,從 Explorer 送出 keyword 前要用 javascript encodeURIComponent() 編碼後再送出才會正常查到資料。

2008.11.27 加註

上面情形是發生在未指定 form 的 method,根據規格預設會以 get 傳送資料,Tomcat 的文件也沒有說明 URIEncoding 是會針對 get 或 post method 作處理。今天又遇到 form submit 中文亂碼問題,這次也不用重新編碼參數了,直接把 form method 設定 post,問題就解決了。看來 submit 的 form 有中文時,用 post method 會是比較好的選擇。

各種 Application Server URI encoding 的設定在這個 網址 有完整說明。

1 Star2 Stars3 Stars4 Stars5 Stars (No Ratings Yet)
Loading...

Ubuntu 8.04 x64 安裝 firefox java plugin

Sun 的 JDK、JRE linux x64 版一直沒有提供 browser plugin,遇到一些使用 applet 的網站或是 web application 就不能正常顯示,這時候只能尋求 icedtea 這個替代品。Ubuntu 只要選擇一個套件就會幫你安裝到好,Fedora 相信也一樣。Ubuntu 安裝如下圖所示,相容性的話要 run 一陣子才會知道了。

1 Star2 Stars3 Stars4 Stars5 Stars (No Ratings Yet)
Loading...