JSF 中 action與actionListener的差異

JavaServer Face (JSF)中,執行網頁頁面上的元件(例如:點選連結h:commandLink, 點選按鈕h:commandButton, 偵測到元件內容onchange, onclick...等)有兩種觸發事件處理方式。

action 

eg:  <h:commandButton value="submit" action="nextPage">

action的值作用在於指引到其他頁面,如上述所示,按下submit會跳轉到 nextPage.jsp中
action的內容也可以指到後端交由bean做些邏輯上的處裡,再回傳型態為字串的值來作跳轉頁面

eg:  

頁面端
<h:commandButton value="submit" action="controller.goNext">

Bean端
public String goNext(){
........
    return "nextPage"
}

P.S 
1.若回傳null或者method的型態為void將會停留在原先頁面
2.若有制定NavigationRule,字串部分可填入to-view-id

actionListener

actionListener則是呼叫到bean裡面的method,並且有傳入actionEvent物件。此項目只有負責處裡邏輯上的功能,並沒有頁面呼叫的功用。

eg: 

頁面端
 <h:commandButton value="submit" actionListener="controller.doSomething">

Bean端
 public void doSomething(actionEvent e){
....
}



綜合比較
action:
有回傳值 可導頁 可做商業邏輯處裡
actionListener:
無回傳值 不可導頁 可以做商業邏輯


P.S  兩者可同時使用,也就表示在同一個動作中,至少能做兩種處裡。
因為常會遇到某一個前人所寫的元件已使用的其中一個action,若想要再多做邏輯上的處裡而動用到整個元件非常不妥當,因此可以用另外一個action去做另一個邏輯處裡。

留言

這個網誌中的熱門文章

[專案] 銀行端末系統

如何在MacOS 中自由切換不同Python版本 - pyenv + virtualenv

用 C# 控制 Win7 輸入法