3

我在 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 请求参数。

现在。据我所知,您只能将 JSF 2.1 和 Spring Web Flow 结合起来,而不能直接结合 Spring MVC。有谁知道我怎样才能完成这个要求?

4

1 回答 1

2

Spring MVC 和 JSF 都在单独的 servlet 上工作,这些 servlet 只能映射到不与另一个 servlet 冲突的上下文,所以这不能轻易完成,如果你成功了,那么它基本上是一个巨大的 hack。

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

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

Actor -> /admin/page.jsf -> FacesServlet -> JSF 视图 -> JSF 控制器 -> 业务逻辑层 -> RESTFUL Web 服务

通过这种方式,您的 RESTFUL Web 服务可以返回 XML 或 JSON 数据并充当您的 DAO,您的业务逻辑层可以在其上执行额外的逻辑。

于 2012-09-11T19:15:24.457 回答