非即时事件 流程
1 * 回復畫面(Restore View)
2 * 套用請求值(Apply Request Values)
3 * 執行驗證(Process Validations)
4 * 更新模型值(Update Model Values)
5 * 喚起應用程式(Invoke Application)
6 * 繪製回應畫面(Render Response)
即时事件流程
1 * 回復畫面(Restore View)
2 * 套用請求值(Apply Request Values)
5 * 喚起應用程式(Invoke Application)
6 * 繪製回應畫面(Render Response)
不会验证,不会更新model模型,会执行对应的actionListener,then action
1 * 回復畫面(Restore View)
2 * 套用請求值(Apply Request Values)
3 * 執行驗證(Process Validations)
4 * 更新模型值(Update Model Values)
5 * 喚起應用程式(Invoke Application)
6 * 繪製回應畫面(Render Response)
即时事件流程
1 * 回復畫面(Restore View)
2 * 套用請求值(Apply Request Values)
5 * 喚起應用程式(Invoke Application)
6 * 繪製回應畫面(Render Response)
不会验证,不会更新model模型,会执行对应的actionListener,then action
<h:form>
<h3><h:outputText value="#{msgs.hintText}"/></h3>
<h:outputText value="#{msgs.nameText}"/>:
<h:inputText value="#{user.name}"/><p>
<h:outputText value="#{msgs.passText}"/>:
<h:inputSecret value="#{user.password}"/><p>
<h:commandButton value="#{msgs.commandText}"
action="#{user.verify}"/>
<h:commandButton value="#{msgs.Text}"
immediate="true"
actionListener="#{user.changeLocale}"/>
</h:form>
這是一個可以讓使用者決定使用語系的示範,最後一個commandButton元件被設定了immediate屬性,
當按下這個按鈕後,JSF套用請求值之後會立即處理指定的actionListener,而不再進行驗證、更新模型值,
簡單的說,就這個程式來說,您在輸入欄位與密碼欄位中填入的值,不會影響您的user.name與
user.password。
参:http://www.javaworld.com.tw/confluence/pages/viewpage.action?pageId=2709
------------附----------------------
所有的物件喚起都是在伺服端執行的,至於該喚起什麼物件,則是依一個基本的流程:
- 回復畫面(Restore View)
依客戶端傳來的session資料或伺服端上的session資料,回復JSF畫面元件。
- 套用請求值(Apply Request Values)
JSF畫面元件各自獲得請求中的值屬於自己的值,包括舊的值與新的值。
- 執行驗證(Process Validations)
轉換為物件並進行驗證。
- 更新模型值(Update Model Values)
更新Bean或相關的模型值。
- 喚起應用程式(Invoke Application)
執行應用程式相關邏輯。
- 繪製回應畫面(Render Response)
對先前的請求處理完之後,產生畫面以回應客戶端執行結果。