JSF 中 action與actionListener的差異
JavaServer Face (JSF)中,執行網頁頁面上的元件(例如:點選連結h:commandLink, 點選按鈕h:commandButton, 偵測到元件內容onchange, onclick...等)有兩種觸發事件處理方式。
Bean端
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">
public void doSomething(actionEvent e){
....
}
綜合比較
action:
有回傳值 可導頁 可做商業邏輯處裡
actionListener:
無回傳值 不可導頁 可以做商業邏輯
P.S 兩者可同時使用,也就表示在同一個動作中,至少能做兩種處裡。
因為常會遇到某一個前人所寫的元件已使用的其中一個action,若想要再多做邏輯上的處裡而動用到整個元件非常不妥當,因此可以用另外一個action去做另一個邏輯處裡。
P.S 兩者可同時使用,也就表示在同一個動作中,至少能做兩種處裡。
因為常會遇到某一個前人所寫的元件已使用的其中一個action,若想要再多做邏輯上的處裡而動用到整個元件非常不妥當,因此可以用另外一個action去做另一個邏輯處裡。
留言
張貼留言