集成Spring MVC和JSF 2.1


问题内容

我有一个用Spring MVC和Hibernate-
Search构建的巨大的只读RESTFUL应用程序,该应用程序将一些数据编组到json和xml中,供移动应用程序和监视应用程序使用。

我们的网址非常简单,我们拥有以下功能:

服务器:端口/实体/ ID /?marshalling = json

要么

服务器:端口/实体/ ID /?marshalling = xml

而有时

服务器:端口/实体/id/?marshalling=something&filterProp=entity.prop&ordering=desc

现在,我需要使用JSF 2.1为此做一个表示层,并添加一些用户管理功能,我在想这样的事情:

服务器:端口/实体/ ID /?marshall = html

或完全省略marshall request参数。

现在。据我所知,您只能将JSF 2.1和Spring Web Flow结合起来,不能直接结合Spring MVC。有人知道我该如何满足这一要求?


问题答案:

Spring
MVC和JSF都在单独的servlet上工作,这些servlet只能映射到与另一个servlet不冲突的上下文,因此这不能轻易实现,如果成功,那么这基本上是一个巨大的麻烦。

如果我绝对必须这样做 (我不 会这样做 ,那么我可能会使用marshall
servlet克隆我的JSF请求,使用WebClient将该请求发送到FacesServlet,然后将返回的WebClient响应复制到我的编组servlet响应并返回。这对于用户是透明的,但是高度混乱并且可能不安全。

实现基于Web的单独表示层的最佳方法是将对表示层的请求映射到FacesServlet,这样就不会直接调用RESTFUL Web服务。

Actor-> /admin/page.jsf-> FacesServlet-> JSF View-> JSF Controller->业务逻辑层->
RESTFUL Web服务

这样,您的RESTFUL Web服务可以返回XML或JSON数据并充当DAO,您的业务逻辑层可以对此执行其他逻辑。