JSF 是 Java 世界中非常流行的技术,然而,与 Spring 的合作仍然很痛苦,并且需要“讨厌”的 hack。我目前遇到这种“黑客”之一的问题。
Spring 服务是使用SpringBeanFacesELResolver
. 它配置在faces-config.xml
:
<application>
<el-resolver>
org.springframework.web.jsf.el.SpringBeanFacesELResolver
</el-resolver>
</application>
Spring服务的注入非常丑陋,但它正在工作:
@ManagedProperty(value="#{customerService}")
CustomerService customerService;
但也有问题。JSF 要求我托管的 bean 应该是可序列化的。这意味着,Spring 服务也必须是可序列化的,或者该字段应该是瞬态的。当字段是瞬态时,注入不起作用(我在该字段中有 null)。在我看来,让 Spring 服务可序列化不是一个好主意,而且是一个潜在的性能问题——Hibernate 上下文、数据源应该如何处理,这些都被注入到 Spring 服务中?
那么,将 Spring 服务与 JSF 托管 bean 一起使用的正确且不那么痛苦的方法是什么?