JSF教程(8)——生命週期之Apply Request Values Phase

來源:互聯網
上載者:User

標籤:amp   綁定   context   apply   ace   而且   err   ext   its   

當一個組件樹在一個postbacks請求中被恢複之後其中每一個組件從request的參數中取得各自的值,這裡使用的是processDecodes方法。

這個值會儲存在本地的每一個組件中,在原始碼中此過程的代碼較為簡單,由於實現者將取值這個操作所有封裝在processDecodes方法中。只是說實話JSF的這部分的實現非常失敗。由於在UIViewRoot中有將近兩千行代碼,這,這。這……

(UIViewRoot.java中的processDecodes方法)

public void processDecodes(FacesContext context) {        initState();        notifyBefore(context, PhaseId.APPLY_REQUEST_VALUES);        try {            if (!skipPhase) {                if (context.getPartialViewContext().isPartialRequest() &&                    !context.getPartialViewContext().isExecuteAll()) {                    context.getPartialViewContext().processPartial(PhaseId.APPLY_REQUEST_VALUES);                } else {                    super.processDecodes(context);                }                broadcastEvents(context, PhaseId.APPLY_REQUEST_VALUES);            }        } finally {            clearFacesEvents(context);            notifyAfter(context, PhaseId.APPLY_REQUEST_VALUES);        }    }

假設不論什麼一個解碼方法或者監聽器的事件調用當前FacesContext執行個體中的renderResponse方法。JSF的實現者會跳過 Render Response步驟。事實上這非常好理解在處理組件所須要的值的時候假設遇到錯誤就會直接渲染頁面向使用者進行提示。可是筆者在JSF原始碼中還未找到這部分的實現(衰~)

假設不論什麼的事件在此步驟中加進隊列JSF會將這個事件傳遞給相關的監聽器。

假設頁面上的一些組件中的immediate屬性設定為true那麼驗證,轉化以及事件綁定將都會在這個步驟中進行,假設不論什麼轉換失敗這個組件會產生一個錯誤的提示資訊。並將這個資訊放到FacesContext的顯示隊列中。這個資訊將會在Render Response步驟中顯示出來,同理在驗證步驟中的驗證錯誤資訊也會如此顯示出來。

這時假設程式須要重新導向到不同的應用資源或者要產生一個響應,而且這個響應沒有包括不論什麼JSF組件。那麼就直接調用FacesContext.responseComplete方法。

在這個步驟的最後組件將會被賦予新的值,而且訊息以及時間將會被放到隊列其中等待處理。

假設當前請求被定義為一個局部的請求。那麼局部內容會被從FacesContext中恢複。而且局部處理方法會被運行。

上面的每一個段話都是說的在此階段要處理得各種不同的情況,或者說都是在processDecodes方法中應該考慮到的各個情況,Apply Request Values Phase一言以蔽之:拿值。

JSF教程(8)——生命週期之Apply Request Values Phase

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.