javascript
Spring和JSF集成:MVC螺母和螺栓
- 向后兼容。 支持JSF 1.2涉及的工作太多,而Spring 3.1中出現(xiàn)了太多的好東西,可以忽略。
- MVC注釋為王。 @RequestMapping似乎是大多數(shù)人的首選方法。 讓我們僅支持此功能,并將所有自定義注釋保持在最低限度。
- 減少依賴性。 重用東西很好,但這是一個集成項目,因此集成越少越好。
考慮到這一點,我決定以Web Flow的org.springframework.faces.mvc.JsfView類為靈感。 該類非常好用,因為它只處理MVC的View ,而Model和Controller完全保留在Spring領(lǐng)域中。 JsfView的唯一問題是缺少回發(fā)支持。 我們需要以某種方式檢測對視圖的初始請求和任何后續(xù)的JSF回發(fā)之間的差異。
由于Spring MVC具有非常靈活的架構(gòu),因此這是完全可能的。 我們可以在DispatcherServlet注冊多個HandlerMapping和HandlerAdapter bean。 為了支持JSF,我們需要在此鏈中的某個較高層來檢測和處理回發(fā),而將不是回發(fā)的所有內(nèi)容以常規(guī)方式處理。 這是事件的一般順序:
user dispatcher @controller| /some/request | ||-------------------->| maps to || |------------->| creates| | |------------> FacesView| | (/pages/file.xhtml)| | render || |-------------------------------->|| | [Delegate to JSF]| response |<--------------------------------||<--------------------|| || || /some/request || (postback) ||-------------------->| postback handler| |--------->|| | [Delegate to JSF]| response |<---------||<--------------------| || | | 回發(fā)處理程序有幾個有趣的問題要處理。 1)我們怎么知道我們是回發(fā)。 2)我們?nèi)绾沃酪€原的視圖。 顯然,回發(fā)將是HTTP POST操作,但是我們不能盲目地假設(shè)所有POST都是JSF回發(fā)。 我們還需要知道要還原的XHTML文件,但是該文件基于最后一個請求的@Controller做出的決定。
這兩個問題的答案是編寫我們自己的JSF ResponseStateManager 。 ResponseStateManager是JSF狀態(tài)管理基礎(chǔ)結(jié)構(gòu)的一部分,并負(fù)責(zé)讀取和寫入組件狀態(tài)。 通常,JSF會將狀態(tài)數(shù)據(jù)保存在HTTP會話中,并在頁面內(nèi)寫入一個隱藏的表單字段,以便以后可以還原。 使用這種機制,我們可以為MVC編寫一個附加字段,該字段的存在使我們知道我們有一個回發(fā),而且該值還將使我們知道要還原的XHTML文件。
有了回發(fā)處理程序,我們現(xiàn)在可以充分利用Spring和JSF的優(yōu)勢。 我們可以使用@RequestMapping批注來構(gòu)建富有表現(xiàn)力的URL,并使用JSF組件來呈現(xiàn)復(fù)雜的網(wǎng)頁。 如果愿意,我們甚至可以基于完全不同的技術(shù)為同一URL返回不同的視圖(例如,通過檢查HTTP標(biāo)頭,我們可能決定返回JSF頁面或XML文檔)。
如果要查看回發(fā)處理程序代碼,可在此處獲得 。 通常是將代碼庫移動的注意事項。
參考: 集成Spring和JavaServer Faces: JCG合作伙伴 Phillip Webb的 MVC 細(xì)節(jié) ? 在Phil Webb的Blog上 。
翻譯自: https://www.javacodegeeks.com/2012/03/spring-jsf-integration-mvc-nuts-and.html
總結(jié)
以上是生活随笔為你收集整理的Spring和JSF集成:MVC螺母和螺栓的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 5G NR是一种什么样的技术它在5G商用
- 下一篇: 康佳手机报价(康佳手机官网商城)