成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

從JSF的切入點控制JSF

開發(fā) 后端
本文介紹從JSF的切入點控制JSF,以及介紹怎么切入JSF的生命周期呢?JSF提供了很多方法。

JSF框架是一個非常靈活功能非常強大的框架。它的每一個組成部分幾乎都是可替換的—可以使用用戶自定義的功能實現(xiàn)替換其默認(rèn)實現(xiàn)。同時提供了很多切入點(可插入機制,類似插件概念),以供用戶控制JSF的生命周期各種不同階段來達(dá)到自己的目的。
本文介紹幾種常見的控制JSF生命周期的切入點,希望能對大家理解JSF有點幫助。

我們知道JSF把整個生命周期劃分成了6個階段,具體為:restore view(重載視圖)階段,apply request value(應(yīng)用請求值)階段,process validation(合法性檢查)階段,update model value(更新模型值)階段,invork application(事件處理)階段,render(畫面重畫)階段。并在不同的階段完成不同的任務(wù),這里不對具體的任務(wù)作詳細(xì)描述了,以后,我們會在其他文章中加以介紹。

怎么切入JSF的生命周期呢?JSF提供了很多方法:

1、從Lifecycle切入。
Lifecycle就是JSF生命周期的控制中心,相當(dāng)于人的心臟,它的重要性和位置可想而知。在Lifecycle里,主要負(fù)責(zé)調(diào)用上面提到的生命周期的6個階段的處理。就是這么重要的控制中心,JSF也提供了切入方法以讓我們完全替代它。

1)首先,需要在web.xml里定義以下內(nèi)容,讓JSF知道你要使用你自己的Lifecyle實現(xiàn),而不是默認(rèn)的Lifecycle實現(xiàn)。

  1. <context-param> 
  2.   <param-name>javax.faces.LIFECYCLE_ID</param-name> 
  3.   <param-value>yourself.LifecyleImpl</param-value> 
  4. </context-param> 

2)上面提到的yourself.LifecyleImpl便是你自己的Lifecyle實現(xiàn),它必須從javax.faces.lifecycle.Lifecycle虛擬類繼承并實現(xiàn)其中的虛擬方法。

因為JSF提供了很多其他方法來讓你控制JSF,所以除非特別需要,不建議從Lifecyle的實現(xiàn)直接控制JSF。

2、 從PhaseListener切入。
PhaseListener,簡單說來就是對上述6個階段進(jìn)行監(jiān)聽的切入點。我們可以通過以下步驟實現(xiàn):
1)在JSF的配置文件如faces-config.xml里對phase-listener加以配置,告訴JSF我們需要監(jiān)視它的生命周期。

  1. <lifecycle> 
  2. <phase-listener>yourself.YourPhaseListener</phase-listener> 
  3. </lifecycle>  

2)yourself.YourPhaseListener就是你自己的phase-listener實現(xiàn)。它必須實現(xiàn)javax.faces.event.PhaseListener接口。它提供了3個方法,讓你完成你想要做的事情:

public void beforePhase(PhaseEvent phaseEvent):在每個階段處理之前被調(diào)用
public void afterPhase(PhaseEvent phaseEvent):在每個階段處理之后被調(diào)用
public PhaseId getPhaseId():告訴JSF你要監(jiān)視哪個phase??梢灾付ㄒ粋€,或全部階段。


3、 從ActionListener切入。
當(dāng)一個按鈕被按下,或者命令聯(lián)結(jié)被點擊時,JSF會在invork application階段的broadcast event時通過ActionListener調(diào)用事先綁定的事件處理方法。如果有用戶自定義的ActionListener時,JSF將使用用戶自定義ActionListener來代替默認(rèn)的ActionListener。

用戶自定義ActionListener必須實現(xiàn)javax.faces.event.ActionListener接口,并實現(xiàn)其接口方法:public void processAction(ActionEvent actionEvent)。注意,在這個實現(xiàn)方法里,必須調(diào)用控件的事件處理方法(JSF Backing Bean中的事件處理方法),并對其返回值做出畫面遷移處理和其他你自己的處理等。

  1. import javax.el.ELContext;    
  2. import javax.el.ELException;    
  3. import javax.el.ExpressionFactory;    
  4. import javax.el.MethodExpression;    
  5. import javax.faces.application.Application;    
  6. import javax.faces.application.NavigationHandler;    
  7. import javax.faces.context.FacesContext;    
  8. import javax.faces.event.AbortProcessingException;    
  9. import javax.faces.event.ActionEvent;    
  10.    
  11. ublic class MyActionListener implements javax.faces.event.ActionListener {    
  12.     
  13.    public void processAction(ActionEvent actionEvent) throws AbortProcessingException {    
  14.        FacesContext context = FacesContext.getCurrentInstance();      
  15.         Application application = context.getApplication();      
  16.     
  17.         ELContext elContext = context.getELContext();    
  18.         ExpressionFactory ef = context.getApplication().getExpressionFactory();    
  19.               
  20.         MethodExpression me = ef.createMethodExpression(elContext, "托管bean的方法", Void.TYPE, null);    
  21.             
  22.         String outcome = null;  //<from-outcome>outcome</from-outcome>      
  23.             
  24.        try{    
  25.             me.invoke(elContext, null);    
  26.           }catch(ELException elexp){    
  27.            Throwable wrapped = elexp.getCause();    
  28.             wrapped.printStackTrace();    
  29.           }    
  30.              
  31.        NavigationHandler navigationHandler = application.getNavigationHandler();      
  32.         navigationHandler.handleNavigation(context, null, outcome);      
  33.               
  34.         //Render Response if needed      
  35.         context.renderResponse();      
  36.             
  37.    }    
  38.     
  39.  }   

【編輯推薦】

  1. JSF和Tapestry全面比較
  2. 開發(fā)自定義JSF組件
  3. 簡述學(xué)習(xí)JSF小記
  4. JSF圖形組件管理圖形bean組件
  5. Seam與JSF的加減法
責(zé)任編輯:佚名 來源: 電子工業(yè)出版社
相關(guān)推薦

2009-06-26 11:15:08

JSF入手JSP

2009-09-23 17:56:45

JSF入門

2022-02-09 09:08:20

XDR安全運營網(wǎng)絡(luò)安全

2015-08-13 09:55:22

大數(shù)據(jù)

2009-06-11 11:22:40

JSFJSPJSF的UI組件

2009-06-26 13:48:57

G4JSFGWTJSF

2009-06-26 14:06:08

JSF基礎(chǔ)框架

2009-06-22 15:39:45

JSFGlassFish管理

2009-06-22 16:42:26

JSF的工作方式

2009-06-23 16:22:23

JSF能否

2009-06-22 14:13:08

JSF入門

2009-06-23 13:01:04

JSF應(yīng)用

2009-06-23 13:55:17

JSF標(biāo)簽

2009-06-24 14:25:13

JSF整體架構(gòu)

2009-06-26 10:54:24

JSF技術(shù)

2009-06-29 14:30:27

JSF技術(shù)

2009-06-23 13:21:26

JSF和Spring

2009-06-17 15:18:38

JSF與Spring

2009-06-25 13:03:48

JSF的UI組件

2009-06-29 13:22:19

JSF技術(shù)JSF組件
點贊
收藏

51CTO技術(shù)棧公眾號

主站蜘蛛池模板: 91在线精品播放 | 黑人巨大精品欧美一区二区免费 | www网站在线观看 | 毛片大全| 亚洲视频中文字幕 | 欧美一区二区在线观看视频 | 国产精品视频久久久久久 | 久久精品国产一区老色匹 | 亚洲免费在线视频 | 久久久性色精品国产免费观看 | 欧美性大战xxxxx久久久 | 久久精品国产a三级三级三级 | 一级毛毛片 | 欧美日韩在线不卡 | 日韩电影免费在线观看中文字幕 | 亚洲一区中文字幕 | 在线免费观看成人 | 国产精品久久久久久久7777 | 久久久高清 | 中文字幕欧美一区二区 | 日韩中文电影 | 国产一区二区三区四区三区四 | 一本一道久久a久久精品综合蜜臀 | 亚洲精品一区在线 | 日韩精品久久久久 | 国产一区二区在线免费观看 | 九色91视频| 国产亚洲人成a在线v网站 | 亚洲区一区二 | 69福利影院 | 三级成人片 | 91精品欧美久久久久久久 | 国产日韩一区二区三免费高清 | 精品欧美一区二区在线观看 | 一区二区三区在线 | 欧 | 欧美一区免费 | 午夜精品久久 | 久久久久久国产精品久久 | 91高清免费观看 | 国产精品激情小视频 | 伊人春色成人 |