2012-09-11 58 views
3

我有一個巨大的只讀RESTFUL應用程序,它構建在Spring MVC和Hibernate-Search中,它將一些數據彙集到json和xml中以供移動應用程序和監視應用程序使用。集成Spring MVC和JSF 2.1

我們的網址是非常簡單的,我們有這樣的:

服務器:端口/實體/ ID /編組= JSON

服務器:端口/實體/ id /?marshalling = xml

有時候還有

服務器:端口/實體/ ID /編組=東西& filterProp = entity.prop &排序=遞減

現在我有一個要求,做一個介紹層爲此使用JSF 2.1和加入一些用戶管理的能力和我的東西像這樣考慮:

服務器:端口/實體/ ID /馬歇爾= HTML

或者完全省略marshall請求參數。

現在。據我所知,你只能搭配JSF 2.1和Spring Web Flow,而不能直接搭配Spring MVC。任何人都知道我該如何實現這一要求?

回答

2

Spring MVC和JSF都在獨立的servlet上工作,它們只能映射到與另一個servlet不衝突的上下文,所以這不能輕易完成,如果成功,那麼它基本上是一個巨大的黑客攻擊。

如果我絕對必須做這樣(我不會),那麼我可能會使用馬歇爾servlet來複制我的JSF請求,使用Web客戶端將請求發送到我的FacesServlet的,然後複製返回WebClient響應到我的編組servlet響應並返回。這對用戶來說是透明的,但是非常麻煩並且可能不安全。

實現基於Web的獨立表示層的最佳方法是將請求映射到FacesServlet,以便RESTFUL Web服務不會被直接調用。

演員 - > /admin/page.jsf - > FacesServlet的 - > JSF視圖 - > JSF控制器 - >業務邏輯層 - > RESTful Web服務

這樣你的RESTful Web服務可以返回XML或JSON數據並充當您的DAO,您的業務邏輯層可以在其上執行其他邏輯。

+0

我對這個主題的表現有點專注......有關它的任何有用的提示? – ElderMael

+0

@mael如果您關心這種方法的性能,那麼另一種選擇是在同一個實例上運行RESTFUL Web服務以及JSF前端,這將允許您繞過服務層並直接轉到RESTFUL Web服務的業務邏輯層。這將減少在JSF服務器端進行這些附加Web請求的開銷。 –