2012年3月28日 星期三

Hibernate 教學 - 繼承 : Table per concrete class with implicit polymorphism

本篇介紹的是Hibernate繼承機制方案中的另一解法

跟上一篇大同小異 Hibernate 教學 - 繼承 : Table per concrete class with unions (<如需看以下內容請先看這篇)

基本上Discount 和 Free 這兩個實體類別都會對應一個Table

差別式在於Table per concrete class with unions 這個作法下

他只需透過一個映射檔就能夠交代繼承關係(union-subclass)

那麼在 Table per concrete class with implicit polymorphism 這個情況下

你必須針對每個實體類都撰寫一份映射文件

這樣子的狀況下 就會出現共同屬性(父類別的屬性) 會出現在每份映射文件內

也就是說 會寫到一些重複的代碼,如之前的範例就會造成

在 Preferential 這個父類別下的 id 和 name 屬性必須重複在

Discount.hbm.xml 和 Free.hbm.xml 中去定義

當然Table per concrete class with implicit polymorphism 這個方法是繼承架構下

最易懂也易學的一個基本概念。

2012年3月17日 星期六

Hibernate 教學 - 繼承 : Table per concrete class with unions

本篇介紹 Hibernate 中的繼承機制裡的其中一個  Table per concrete class with unions

從字面上翻譯,可以看得出一個table會對應到一個具體類

但是它不像 Table per concrete class with implicit polymorphism 需要一個具體類別就要一個映射檔

Table per concrete class with unions  只需要一個映射檔並透過 union-subclass 

來指名具體類是對映到哪個資料表即可

以下以一個"優惠(Preferential)"為一個抽象的父類別,並有兩個子類別

"折扣(Discount)" 以及 "免費(Free)"

首先先來看這三個簡單的Java程式

Preferential.java

2012年3月16日 星期五

【DisplayTag】Excel亂碼問題

在使用DisplayTag的時候多,如果你會出Excel檔案的時候,多半會發生中文亂碼問題

因為DisplayTag並沒有針對中文作良好的編碼,因此如果你遇到類似問題

不仿採用下面介紹的方法解決亂碼的情況吧

先去下載 displaytag-export-poi-1.1.jar





這是目前官方推薦的作法,它已經將POI導出Excel的一些過程整合到

DisplayTag下以解決中文亂碼的問題,所以你只需要額外下載displaytag-export-poi-1.1這個JAR即可。

  並將它放到/WEB-INF/lib/  最後在classpath下的displaytag.properties中新增這一段

        export.excel.class=org.displaytag.export.excel.ExcelHssfView

        就可以解決問題了。

注意我使用的是 display1.1.1版本,所以你如果抓錯POI的JAR檔,就無法有效解決你的問題



2012年3月15日 星期四

【DisplayTag】匯出檔案

如果有要匯出 Excel,Xml,Pdf,RTF,CSV檔案的話,不仿可以考慮使用 DisplayTag

首先你必須先下載 displayTag相關的JAR檔案

在以下的範例環境我採用displaytag1.1.1版的

接著如果我們想針對網頁上的某份報表進行匯出的動作

可以將原本呈現報表的tabel標籤轉成如下所示:


<display:table export="true" name="show_query" pagesize="10"  >
    <display:column property="userName" title="姓名"  />
    <display:column property="email" title="連絡電話" />         
</display:table>


export="true" 告訴display:table 開啟匯出功能

pagesize="10" 則是每個table會有10筆資料

name="show_query" 資料的來源,這裡的show_query是request裡的一個屬性資料
                                                            等同於 request.getAttribute("show_query")

2012年3月12日 星期一

【Cordova】環境配置與範例

Cordova 的前身是PhoneGap,但是在前陣子已經將PhoneGap捐給Apache基金會了

並命名為Cordova。以下我以Cordova在Android環境上建立一個簡單的HTML範例

首先先到 http://phonegap.com/download/ 這是PhoneGap的官網下載 library

目前最新版是1.5.0,但是下載下來並解壓縮之後的JAR檔案名稱已經更改為 cordova.jar 了

首先先依照下面步驟建立範例程式

前提是你必須已經具備Android得開發環境,包括Eclipse。Android環境配置

建立Android專案

File > New > Android Project > 輸入專案名稱 > 選擇SDK (這裡我是用Android 3.2)

> 設定package name > Finish

完成之後,就可以來配置Cordova的環境

1. 在專案目錄下建立libs的目錄
2. 在assets目錄下建立www目錄

2012年3月9日 星期五

【DWR】調用HttpServletRequest

最近在用 DWR 處理 Ajax 問題時,遇到一個狀況

就是我想要在前端網頁送出請求到後端時,透過HttpSession 檢查請求的有效性

但是我們一般在建立一個 DWR的後端處理元件時,如下:


<create creator="new" javascript="PhoneVisitDataService">
      <param name="class" value="erp.mgt.PhoneVisitDataService" />
</create>


PhoneVisitDataService.java 是一個後端的DWR原件,或許你會問

我該如何讓這之程式取得Session,在Servlet中取得Session是透過:

HttpServletRequest的getSession()取得,那這支程式又該怎樣擁有HttpServletRequest物件

在DWR的應用中,所有的AJAX請求都會先到某一支Servlet

再由該Servlet呼叫 PhoneVisitDataService 的某方法(例如: getPhoneVisitData() )

因此如果要在 getPhoneVisitData方法中取得HttpServletRequest物件

你只要這樣寫就可以了

public PhoneVisitData getPhoneVisitData(HttpServletRequest request) 

這樣DWR就會自動幫你把 HttpServletRequest 物件導入給你的方法中了