如何从 JSF 视图层中隔离 Spring service/persistence 层
How to isolate Spring service/persistence layer from JSF view layer
我正在同时使用 Spring 和 JSF。并且集成是通过 SpringBeanFacesELResolver
.
完成的
我正在使用 @Repository
注释对 DAO class 进行注释。但这导致了一个问题:DAO class 现在对 XHTML/JSF/JSP 个文件可见
所以,现在可以从视图层访问持久层。而且这似乎不是一个好方法。
如何解决?
class路径中的任何 public class 都将对您的 JSP/JSF 可见。但是,只要您不从表示层导入/使用那些 class,就不会破坏基于层的间接寻址 - 在我看来。
附带说明 - 如果您的应用程序没有多种客户端或多个跨国资源,很可能您确实需要一个业务/服务层,并且它可以有效地直接从您的表示层/控制器调用您的存储库。
JSF 是一种服务器端 技术,仅do the proper mapping 针对 xhtml 文件的 faces servlet。最终用户将无法看到任何 xhtml 文件的源内容,因为他对 .xhtml 源的所有请求都将通过 faces servlet 驱动,从而转换为纯 HTML-CSS -javascript组合。
如果 JSF 是您的视图层框架(因为它是唯一声明的 servlet 映射),任何最终用户都将无法访问您的服务方法,至少在不跳过 JSF 本身的情况下是这样。它将为您处理安全和基本请求验证。
无论如何,我不建议您通过 xhtml 访问 Spring beans。对于体系结构问题,只需为此使用托管 bean。如果您查看文档的 Integrating with other web frameworks 部分,您将了解如何使用 FacesContextUtils
class 从 JSF 托管 bean 中获取 Spring bean。 =13=]
我正在同时使用 Spring 和 JSF。并且集成是通过 SpringBeanFacesELResolver
.
我正在使用 @Repository
注释对 DAO class 进行注释。但这导致了一个问题:DAO class 现在对 XHTML/JSF/JSP 个文件可见
所以,现在可以从视图层访问持久层。而且这似乎不是一个好方法。
如何解决?
class路径中的任何 public class 都将对您的 JSP/JSF 可见。但是,只要您不从表示层导入/使用那些 class,就不会破坏基于层的间接寻址 - 在我看来。
附带说明 - 如果您的应用程序没有多种客户端或多个跨国资源,很可能您确实需要一个业务/服务层,并且它可以有效地直接从您的表示层/控制器调用您的存储库。
JSF 是一种服务器端 技术,仅do the proper mapping 针对 xhtml 文件的 faces servlet。最终用户将无法看到任何 xhtml 文件的源内容,因为他对 .xhtml 源的所有请求都将通过 faces servlet 驱动,从而转换为纯 HTML-CSS -javascript组合。
如果 JSF 是您的视图层框架(因为它是唯一声明的 servlet 映射),任何最终用户都将无法访问您的服务方法,至少在不跳过 JSF 本身的情况下是这样。它将为您处理安全和基本请求验证。
无论如何,我不建议您通过 xhtml 访问 Spring beans。对于体系结构问题,只需为此使用托管 bean。如果您查看文档的 Integrating with other web frameworks 部分,您将了解如何使用 FacesContextUtils
class 从 JSF 托管 bean 中获取 Spring bean。 =13=]