您好,登錄后才能下訂單哦!
這期內容當中小編將會給大家帶來有關怎么從JSF的切入點控制JSF,文章內容豐富且以專業的角度為大家分析和敘述,閱讀完這篇文章希望大家可以有所收獲。
JSF框架是一個非常靈活功能非常強大的框架。它的每一個組成部分幾乎都是可替換的—可以使用用戶自定義的功能實現替換其默認實現。同時提供了很多切入點(可插入機制,類似插件概念),以供用戶控制JSF的生命周期各種不同階段來達到自己的目的。下面介紹幾種常見的控制JSF生命周期的切入點。
我們知道JSF把整個生命周期劃分成了6個階段,具體為:restore view(重載視圖)階段,apply request value(應用請求值)階段,process validation(合法性檢查)階段,update model value(更新模型值)階段,invork application(事件處理)階段,render(畫面重畫)階段。
怎么切入JSF的生命周期呢?JSF提供了很多方法:
1、從Lifecycle切入。
Lifecycle就是JSF生命周期的控制中心,相當于人的心臟,它的重要性和位置可想而知。在Lifecycle里,主要負責調用上面提到的生命周期的6個階段的處理。就是這么重要的控制中心,JSF也提供了切入方法以讓我們完全替代它。
1)首先,需要在web.xml里定義以下內容,讓JSF知道你要使用你自己的Lifecyle實現,而不是默認的Lifecycle實現。
<context-param>
<param-name>javax.faces.LIFECYCLE_ID</param-name>
<param-value>yourself.LifecyleImpl</param-value>
</context-param>
2)上面提到的yourself.LifecyleImpl便是你自己的Lifecyle實現,它必須從javax.faces.lifecycle.Lifecycle虛擬類繼承并實現其中的虛擬方法。
因為JSF提供了很多其他方法來讓你控制JSF,所以除非特別需要,不建議從Lifecyle的實現直接控制JSF。
2、 從PhaseListener切入。
PhaseListener,簡單說來就是對上述6個階段進行監聽的切入點。我們可以通過以下步驟實現:
1)在JSF的配置文件如faces-config.xml里對phase-listener加以配置,告訴JSF我們需要監視它的生命周期。
<lifecycle>
<phase-listener>yourself.YourPhaseListener</phase-listener>
</lifecycle>
2)yourself.YourPhaseListener就是你自己的phase-listener實現。它必須實現javax.faces.event.PhaseListener接口。它提供了3個方法,讓你完成你想要做的事情:
public void beforePhase(PhaseEvent phaseEvent):在每個階段處理之前被調用
public void afterPhase(PhaseEvent phaseEvent):在每個階段處理之后被調用
public PhaseId getPhaseId():告訴JSF你要監視哪個phase。可以指定一個,或全部階段。
3、 從ActionListener切入。
當一個按鈕被按下,或者命令聯結被點擊時,JSF會在invork application階段的broadcast event時通過ActionListener調用事先綁定的事件處理方法。如果有用戶自定義的ActionListener時,JSF將使用用戶自定義ActionListener來代替默認的ActionListener。
用戶自定義ActionListener必須實現javax.faces.event.ActionListener接口,并實現其接口方法:public void processAction(ActionEvent actionEvent)。注意,在這個實現方法里,必須調用控件的事件處理方法(JSF Backing Bean中的事件處理方法),并對其返回值做出畫面遷移處理和其他你自己的處理等。
import javax.el.ELContext; import javax.el.ELException; import javax.el.ExpressionFactory; import javax.el.MethodExpression; import javax.faces.application.Application; import javax.faces.application.NavigationHandler; import javax.faces.context.FacesContext; import javax.faces.event.AbortProcessingException; import javax.faces.event.ActionEvent; ublic class MyActionListener implements javax.faces.event.ActionListener { public void processAction(ActionEvent actionEvent) throws AbortProcessingException { FacesContext context = FacesContext.getCurrentInstance(); Application application = context.getApplication(); ELContext elContext = context.getELContext(); ExpressionFactory ef = context.getApplication().getExpressionFactory(); MethodExpression me = ef.createMethodExpression(elContext, "托管bean的方法", Void.TYPE, null); String outcome = null; //<from-outcome>outcome</from-outcome> try{ me.invoke(elContext, null); }catch(ELException elexp){ Throwable wrapped = elexp.getCause(); wrapped.printStackTrace(); } NavigationHandler navigationHandler = application.getNavigationHandler(); navigationHandler.handleNavigation(context, null, outcome); //Render Response if needed context.renderResponse(); } }
上述就是小編為大家分享的怎么從JSF的切入點控制JSF了,如果剛好有類似的疑惑,不妨參照上述分析進行理解。如果想知道更多相關知識,歡迎關注億速云行業資訊頻道。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。