乡下人产国偷v产偷v自拍,国产午夜片在线观看,婷婷成人亚洲综合国产麻豆,久久综合给合久久狠狠狠9

  • <output id="e9wm2"></output>
    <s id="e9wm2"><nobr id="e9wm2"><ins id="e9wm2"></ins></nobr></s>

    • 分享

      JSF中使用FacesContext和ExternalContext對象

       Gemmy 2009-12-23

      在Faces API中有兩個類是要經(jīng)常使用的. 一個是FacesContext 一個是ExternalContext.首先講解如何使用FacesContext .

      對每個JSF請求,F(xiàn)acesServlet對象都會為其獲取一個javax.faces. context.
      FacesContext類的實例。FacesServlet對象將下列3個取自Web容器的對象傳給javax.faces.context.FacesContextFactory對象的getFacesContext方法,以此來做到這一點:

      ●       javax.servlet.ServletContext
      ●       javax.servlet.ServletRequest
      ●       javax.servlet.ServletResponse
      這意味著FacesContext的實例里包含了所有處理JSF請求所需的每個請求的狀態(tài)信息。圖3-1展示了FacesContext實例里封裝的其他一些對象。
      3.2.1 獲取當前實例
      一個經(jīng)常用到的方法是靜態(tài)的getCurrentInstance方法,它返回當前的FacesContext實例。此方法的簽名如下:
      public static FacesContext getCurrentInstance()
      下面的代碼是一個用此方法獲取FacesContext當前實例的例子:
      FacesContext facesContext = FacesContext.getCurrentInstance();
      3.2.2 獲取和修改組件樹
      FacesContext實例里最重要的內(nèi)容是請求頁面的組件樹。組件樹是由javax.faces.tree.Tree類來表示的(本章后面的“使用Tree類”一節(jié)會討論)。FacesContext實例的tree屬性就是Tree對象。
      要獲取或修改Tree對象,可使用tree屬性的讀取方法和賦值方法:
      public abstract Tree getTree()
      public abstract void setTree(Tree tree)
      3.2.3 添加和獲取消息
      在請求處理生命周期里,可能會遇到錯誤。比如,當驗證器執(zhí)行輸入驗證時,因為用戶輸入了不正確的值,驗證可能失?。划斀M件試圖把輸入值轉(zhuǎn)換為綁 定到組件的模型對象所需的類型時,也可能會失敗。所有消息都必須存放到FacesContext實例里以備后面進行處理。比如,您可能希望在頁面里顯示錯 誤消息,從而為用戶更正錯誤提供幫助。
      錯誤消息是由javax.faces.application.Message接口(第11章再詳細討論)來表示的,您可以通過使用FacesContext類的addMessage方法向FacesContext實例里添加Message對象。這個方法的簽名如下:
      public abstract void addMessage(UIComponent component, Message message)
      如果component不為空,新加入的message就關(guān)聯(lián)到component上。否則,它就不與任何特定組件的實例相關(guān)。
      舉例來說,驗證器在驗證組件值失敗時可調(diào)用FacesContext的addMessage方法,傳入值無效的組件及一個包含特定錯誤消息的Message對象。
      所有添加到FacesContext實例的Message對象都被加入到一個集合里??赏ㄟ^調(diào)用getMessages方法的兩個重載方法之一來獲取加入的Message對象:
      public abstract Iterator getMessages()
      public abstract Iterator getMessages(UIComponent component)
      第一種形式的調(diào)用在一個Iterator里返回所有Message對象,而第二種形式的調(diào)用則僅返回與給定UIComponent相關(guān)聯(lián)的Message對象。
      3.2.4 添加和獲取請求處理事件
      UIComponent可以生成FacesEvent對象。比如,當單擊一個UICommand組件時,它會生成一個ActionEvent對 象(ActionEvent類是FacesEvent類的子類)。這個FacesEvent對象需要在FacesContext實例里保存起來,以備請求 處理生命周期里的下一步處理事件時所用。
      可通過使用FacesContext類的addFacesEvent方法向FacesContext實例添加FacesEvent對象。此方法的簽名如下:
      public abstract void addFacesEvent(FacesEvent event)
      要提取先前添加的FacesEvent對象,可調(diào)用getFacesEvents方法,其簽名如下:
      public abstract Iterator getFacesEvents()
      此方法返回FacesEvent時的順序與其在隊列中的順序一致。
      3.2.5 向Response對象里寫入信息
      為了向Response對象里寫入信息,F(xiàn)acesContext類提供了兩個屬性,一個是 javax.faces.Context.ResponseStream類型,另一個是 javax.faces.context.ResponseWriter類型。ResponseStream類型的對象用于輸出二進制數(shù)據(jù),而 ResponseWriter類型的對象則用于輸出字符。這些屬性的讀取方法和賦值方法如下:
      public abstract ResponseStream getResponseStream()
      public abstract void setResponseStream(ResponseStream responseStream)
      public abstract ResponseWriter getResponseWriter()
      public abstract void setResponseWriter(ResponseWriter responseWriter)
      3.2.6 獲取和設(shè)置地區(qū)
      第11章將會討論到,JSF支持國際化和本地化。這意味著您可以根據(jù)用戶的地區(qū)決定發(fā)送什么樣的回應(yīng)信息。locale屬性里存放了當前處理中所用的Locale對象。
      初始狀況下,locale屬性的值和網(wǎng)絡(luò)瀏覽器里指定的地區(qū)是一樣的,但可以修改這個值,從而發(fā)送輸出所使用的地區(qū)將獨立于瀏覽器所使用的地區(qū)。此屬性的讀取方法和賦值方法如下:
      public abstract Locale getLocale()
      public abstract void setLocale(Locale locale)
      3.2.7 操作請求處理生命周期
      FacesContext類還提供了兩個方法與請求處理生命周期進行交互:
      ●       在當前階段的處理完成后,調(diào)用renderResponse方法通知JSF實現(xiàn)把控制權(quán)轉(zhuǎn)到呈現(xiàn)響應(yīng)階段。也就是說,處于當前階段和呈現(xiàn)響應(yīng)階段之間的所有其他階段都不再執(zhí)行。
      ●       調(diào)用responseComplete方法,告訴JSF實現(xiàn)此次請求的HTTP響應(yīng)已經(jīng)完成(比如在使用了HTTP重定向的情況下)。因此,當前階段完成后,必須中止請求處理生命周期的處理。
      這些方法的簽名如下:
      public abstract void renderResponse()
      public abstract void responseComplete()
      3.2.8 獲取其他請求狀態(tài)信息
      其他每個請求的狀態(tài)信息封裝在ExternalContext對象里,可以使用getExternalContext方法獲取該對象:
      public abstract ExternalContext getExternalContext()
      現(xiàn)在講解ExternalContext。
      使用ExternalContext類提供的方法可以獲取ServletContext、ServletRequest和 ServletResponse對象,構(gòu)造FacesContext實例時需要這些對象。除此之外,ExternalContext實例提供了包裝器方 法,可以使用這些方法獲得原來需要從ServletContext、ServletRequest及ServletResponse對象上調(diào)用一些方法獲 得的信息。
      3.3.1 獲取ServletContext、ServletRequest和ServletResponse對象
      可使用下列方法獲取servlet信息:
      ●       getContext 此方法可獲取Web應(yīng)用中與當前請求相關(guān)聯(lián)的ServletContext對象。其簽名如下:
      public abstract Object getContext()
      ●      getRequest 此方法可獲取代表當前正在處理的請求的ServletRequest對象。其簽名如下:
      public abstract Object getRequest()
      ●       getResponse 此方法可獲取代表當前正在呈現(xiàn)的響應(yīng)的ServletResponse對象。其簽名如下:
      public abstract Object getResponse()
      這些方法都是返回一個java.lang.Object對象,不是servlet特有的類型,這樣就可以使JSF實現(xiàn)獨立于其運行的環(huán)境。比如,JSF既可用于Web容器,也可以用于其他容器,如portlet等。
      3.3.2 獲取ServletContext特性
      getApplicationMap方法返回一個包含ServletContext對象里全部特性名/值對的Map對象。下面是此方法的簽名:
      public abstract java.util.Map getApplication()
      作為一個例子,下面的代碼可獲取一個名叫databaseUtility的特性:
      Object contextAttribute = null;
      FacesContext facesContext = FacesContext.getCurrentInstance();
      ExternalContext externalContext = facesContext.getExternalContext();
      Map contextMap = externalContext.getApplicationMap();
      if (contextMap!=null)
      contextAttribute = contextMap.get("databaseUtility");
      3.3.3 獲取Session對象及其特性
      通過ExternalContext對象可訪問與當前請求相關(guān)聯(lián)的Session對象。getSession方法可取回當前用戶的 javax.servlet.http.HttpSession對象,如果當前用戶沒有相應(yīng)的Session對象,此方法的行為由傳入的參數(shù)決定:如果為 該方法傳入了一個true值,它會創(chuàng)建一個Session對象;否則,它會返回null。下面是getSession方法的簽名:
      public abstract Object getSession(boolean create)
      此方法其實是javax.servlet.http.HttpServletRequest接口中g(shù)etSession方法的包裝器。
      getSessionMap方法返回一個包含與當前請求相關(guān)聯(lián)的Session對象里所有特性名/值對的Map對象。下面是它的方法簽名:
      public abstract java.util.getSessionMap()
      要獲取Session對象里的特性,可調(diào)用Map類的get方法,傳入要獲取的特性名即可。文檔中沒有指明在當前請求沒有相應(yīng)Session對 象的情況下,此方法是返回null還是一個空的Map對象。所以在調(diào)用Map的get方法之前,需要先檢查Map是否為null。下面的代碼是獲取 Session特性的例子:
      Object sessionAttribute = null;
      FacesContext facesContext = FacesContext.getCurrentInstance();
      ExternalContext externalContext = facesContext.getExternalContext();
      Map sessionMap = externalContext.getSessionMap();
      if (sessionMap!=null)
      sessionAttribute = sessionMap.get(key);
      最后一行的key是一個包含特性名的字符串。
      3.3.4 獲取ServletContext對象的初始參數(shù)
      getInitParameter方法是ServletContext對象的getInitParameter方法的包裝器,用這個方法可以提取在部署描述符(web.xml文件)里用context-init元素指定的初始參數(shù)值。此方法的簽名如下:
      public abstract String getInitParameter(String parameterName)
      舉例來說,如果在部署描述符聲明了如下context-init元素:
      <context-param>
      <param-name>contactPerson</param-name>
      <param-value>Scott Jobim</param-value>
      </context-param>
      下面代碼中的字符串變量initParam的值會是Scott Jobim。
      FacesContext facesContext = FacesContext.getCurrentInstance();
      ExternalContext externalContext = facesContext.getExternalContext();
      String initParam = externalContext.getInitParameter("contactPerson");
      getInitParameterMap方法返回一個包含ServletContext對象中全部初始參數(shù)的Map對象。其簽名如下:
      public abstract java.util.Map getInitParameterMap()
      為了獲取一個初始參數(shù)的值,使用Map對象的get方法,同時傳遞初始參數(shù)的名稱。比如,下面的代碼把初始參數(shù)databaseName的值輸出到控制臺。
      FacesContext facesContext = FacesContext.getCurrentInstance();
      ExternalContext externalContext = facesContext.getExternalContext();
      Map paramMap = externalContext.getInitParameterMap();
      if (paramMap!=null) {
      System.out.println(paramMap.get("databaseName"));
      }
      3.3.5 獲取Request對象的特性
      getRequestMap方法返回一個包含當前Request對象中全部特性名/值對的Map對象。其方法簽名如下:
      public abstract java.util.Map getRequestMap()
      作為一個例子,下面的代碼可用來提取Request對象里的特性:
      Object requestAttribute = null;
      FacesContext facesContext = FacesContext.getCurrentInstance();
      ExternalContext externalContext = facesContext.getExternalContext();
      Map requestMap = externalContext.getRequestMap();
      if (requestMap!=null)
      requestAttribute = requestMap.get(key);
      最后一行里的Key是一個包含要提取的屬性名的字符串。
      3.3.6 訪問Request對象里的參數(shù)名和值
      getRequestParameterMap、getRequestParameterNames和getRequestParameterValuesMap方法可用來訪問Request對象里的參數(shù)名和值。
      getRequestParameterMap返回一個包含Request對象里全部參數(shù)名/值對的Map對象。其簽名如下:
      public abstract java.util.Map getRequestParameterMap()
      作為一個例子,下面的代碼可用來提取名為id的請求參數(shù)的值:
      String id = null;
      FacesContext facesContext = FacesContext.getCurrentInstance();
      ExternalContext externalContext = facesContext.getExternalContext();
      Map requestParameterMap = externalContext.getRequestParameterMap();
      if (requestParameterMap!=null)
      id = (String) requestParameterMap.get("id");
      getRequestParameterNames方法返回一個包含全部請求參數(shù)名的Iterator。此方法其實是 ServletRequest.getParameterNames方法的包裝器。不同的是,ExternalContext類的 getRequestParameterNames返回一個Iterator,而不是java.util.Enumeration。此方法的簽名如下:
      public abstract java.util.Iterator getRequestParameterNames()
      作為一個例子,下面的代碼把所有的請求參數(shù)名/值對輸出到控制臺。
      FacesContext facesContext = FacesContext.getCurrentInstance();
      ExternalContext externalContext = facesContext.getExternalContext();
      Map requestParameterMap = externalContext.getRequestParameterMap();
      Iterator parameterNames = externalContext.getRequestParameterNames();
      while (parameterNames.hasNext()) {
      String parameterName = (String) parameterNames.next();
      String parameterValue =
      (String) requestParameterMap.get(parameterName);
      System.out.println(parameterName + " : " + parameterValue);
      }
      getRequestParameterValuesMap方法返回一個包含Request對象里全部參數(shù)名/值對的Map對象。此方法與 getRequestParameterMap方法很相似,但getRequestParameterValuesMap可返回全部相同參數(shù)名的值。在此 方法返回的Map對象上調(diào)用get(key)方法,這一點等同于獲取當前請求的ServletRequest并在其上調(diào)用 getParameterValues(key)。也就是說,Map對象返回的是一個字符串數(shù)組。 GetRequestParameterValuesMap方法的簽名如下:
      public abstract java.util.Map getRequestParameterValuesMap()
      下面例子中的代碼把請求參數(shù)id的全部值輸出到控制臺。
      String[] id = null;
      FacesContext facesContext = FacesContext.getCurrentInstance();
      ExternalContext externalContext = facesContext.getExternalContext();
      Map requestParameterValuesMap = externalContext.getRequestParameterValuesMap();
      if (requestParameterValuesMap!=null) {
      id = (String[]) requestParameterValuesMap.get("id");
      // print all values of id
      for (int i=0; i<id.length; i++) {
      System.out.println(id[i]);
      }
      }

        本站是提供個人知識管理的網(wǎng)絡(luò)存儲空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點。請注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購買等信息,謹防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點擊一鍵舉報。
        轉(zhuǎn)藏 分享 獻花(0

        0條評論

        發(fā)表

        請遵守用戶 評論公約

        類似文章 更多