JSF は Java の世界で非常に人気のあるテクノロジですが、Spring との連携は依然として困難であり、「厄介な」ハックが必要です。私は現在、この「ハック」の 1 つに問題があります。
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 サービスをシリアライズ可能にすることは、私の意見では良い考えではなく、潜在的なパフォーマンスの問題です。すべて Spring サービスに注入される Hibernate コンテキスト、データ ソースはどうなるでしょうか?
では、JSF マネージド Bean で Spring サービスを使用するための、正しくて痛みの少ない方法は何ですか?