05.FacesContext

FacesContext / ExtrnalContext




javax.faces.context.*


import javax.faces.context.ExternalContext;
import javax.faces.context.FacesContext;

...

ExternalContext ctx = FacesContext.getCurrentInstance().getExternalContext();
HttpServletRequest request = (HttpServletRequest) ctx.getRequest();
Map<String, Object> reqmap = ctx.getRequestMap();
HttpServletResponse response = (HttpServletResponse) ctx.getResponse();
HttpServletSession session = (HttpServletSession) ctx.getSession();
Map<String, Object> sesmap = ctx.getSessionMap();
Flash flash = (Flash)ctx.getFlash();





<f:param> / <f:viewParam>


<h:commandLink ... actionListener="bean.check" ...>
<f:param name="op" value="google" />

public check(ActionEvent ae) {
this.op = (String) FacesContext.getCurrentInstance().getExternalContext().getRequestParameterMap().get("op"); }

<f:metadata>
<f:viewParam>

<h:commandLink action="" >
    <f:param name="var" value="option" />
    <f:viewParam name="var" value="#{managedBean.property}" />
</h:commandLink>



FacesContext


對每個JSF請求,FacesServlet 物件都會為其獲取一個 javax.faces.context.FacesContext 類別的實例。

javax.faces.context.FacesContextFactory 物件的 getFacesContext方法,以此來做到這一點:
  • javax.servlet.ServletContext
  • javax.servlet.ServletRequest
  • javax.servlet.ServletResponse
這意味著FacesContext的實例裡包含了所有處理JSF請求所需的每個請求的狀態資訊。 圖3-1展示了FacesContext實例裡封裝的其他一些物件。

圖3-1  FacesContext實例及其封裝的物件


FacesContext fc = FacesContextFactory.getCurrentInstance();

組件樹(Tree)


獲取和修改組件樹(javax.faces.tree.Tree)

添加和獲取消息(javax.faces.application.Message)

添加和獲取請求處理事件
UIComponent可以生成FacesEvent對象。比如,當單擊一個UICommand組件時,它會生成一個ActionEvent對象 (ActionEvent類是FacesEvent類的子類)。


向Response對象裡寫入資訊
為了向Response對象裡寫入資訊,FacesContext類提供了兩個屬性,一個是 javax.faces.Context.ResponseStream類型,另一個是 javax.faces.context.ResponseWriter類型。ResponseStream類型的對象用於輸出二進制資料,而 ResponseWriter類型的對象則用於輸出字符。


locale屬性裡存放了當前處理中所用的Locale對象。

操作請求處理生命週期

FacesContext類還提供了兩個方法與請求 處理生命週期進行交互:

●       在當前階段的處理完成後,調用renderResponse方法通知JSF實現把控制權轉到呈現響應階段。也就是說,處於當前階段和呈現響應階段之間的所 有其他階段都不再執行。

●       調用responseComplete方法,告訴JSF實現此次請求的HTTP響應已經完成(比如在使用了HTTP重定向的情況下)。因此,當前階段完成 後,必須中止請求處理生命週期的處理。

這些方法的簽名如下:

public abstract void renderResponse()

public abstract void responseComplete()

3.2.8  獲取其他請求狀態資訊

其他每個請求的狀態資訊封裝在ExternalContext對象裡,可以使用 getExternalContext方法獲取該對象:

public abstract ExternalContext getExternalContext()

ExternalContext放在下一節討論。



http://book.csdn.net/bookfiles/181/1001818237.shtml



JSF中CommandButton与CommandLink传值
http://www.zhlwish.com/2009/12/31/jsf_commandbutton_commandlink/
Comments