JSF - очень популярная технология в мире Java, однако сотрудничество со Spring по-прежнему болезненно и требует «неприятных» хаков. У меня в настоящее время проблема с одним из этих «хаков».
Сервисы Spring вводятся с использованием SpringBeanFacesELResolver
. Настраивается в faces-config.xml
:
<application>
<el-resolver>
org.springframework.web.jsf.el.SpringBeanFacesELResolver
</el-resolver>
</application>
Внедрение служб Spring очень уродливо, но работает:
@ManagedProperty(value="#{customerService}")
CustomerService customerService;
Но есть проблемы. JSF требует от меня, чтобы управляемый компонент был сериализуемым. Это означает, что служба Spring также должна быть сериализуемой или поле должно быть временным. Когда поле временное, инъекция не работает (у меня в этом поле ноль). И делать сериализуемые службы Spring, на мой взгляд, не очень хорошая идея и потенциальные проблемы с производительностью - что должно произойти с контекстом Hibernate, источниками данных, которые все вводятся в службу Spring?
Итак, каков правильный и менее болезненный способ использования служб Spring с управляемыми компонентами JSF?