JSF的一個核心就是事件與監聽。JSF事件分為以下幾種: 1、Value-change events(值改變事件)
當inputText的值改變的時候會觸發processValueChanged事件,此事情內部通過參數,獲取HtmlInputText的控件,然后設定readonly,同時設定panelGrid的模型changePanel的屬性,因為panelGrid綁定了changePanel這個模型。 2、Action events(動作事件)
上面這個是靜態outcome事件,在faces-config.xml中配置相應的屬性后,點擊該按鈕會轉向相應的方法。
如果添加了actionListener屬性的話,點擊之后,在轉向其他頁面之前,會觸發指定的事件,處理之后再轉向。 這里的doSomeAction方法的聲明是void doSomeAction(ActionEvent actionEvent)。
上面這個是動態outcome事件,當點擊該按鈕之后會直接觸發loginForm中的login事件,login事件返回的是一個字符串,在login處理完相應操作之后需要返回一個屬性中已經配置過的字符串,例如success,然后JSF根據faces-config.xml中的配置,跳轉到相應的頁面。login的聲明一般是String login(); 當然也可以通過程序來添加監聽器,不過監聽器類需要實現ActionListener接口:
3、Data model events(數據模型事件)
將上面的代碼放入初始化程序中,當行的選擇改變的時候就會觸發相應的日志打印。 這是因為這段代碼給dataTable控件定義了一個數據模型,數據和相應的事件全部存在這個數據模型里面,然后將dataTable與這個模型進行綁定即可使用它所有的數據和事件。點擊dataTable上面的一行自然也就會出發相應的行選擇事件。 4.Phase events(階段事件)
這個事件是為了捕捉一些階段和過程而設定的,有以下幾個階段可以捕捉:
具體可以參考http://java.sun.com/javaee/javaserverfaces/1.1_01/docs/api/javax/faces/event/PhaseId.html
通過設定在實現類中設定相應的PhaseId以及添加到faces-config.xml中就可以捕捉相應階段事件并添加響應的代碼
實現類
在faces-config.xml中添加
當然可以添加無限個的監聽器
下面是請求處理的生命周期,大家可以直觀的看一下各個階段執行順序: 各個階段的說明以及所能觸發的事件