Не перемещайте управляемые JSF-компоненты в Spring-компоненты. Жизненные циклы (области видимости) JSF и Spring не совпадают полностью. Например, область просмотра и область диалога отсутствуют в Spring Framework.
Вместо этого сохраняйте компоненты поддержки JSF как компоненты, управляемые JSF, и автоматически подключайте к ним компоненты Spring.
Определите абстрактный суперкласс для базовых компонентов JSF следующим образом:
public abstract class AutowireableManagedBean {
protected AutowireCapableBeanFactory ctx;
@PostConstruct
protected void init() {
logger.debug("init");
ctx = WebApplicationContextUtils
.getWebApplicationContext(
(ServletContext) FacesContext.getCurrentInstance()
.getExternalContext().getContext())
.getAutowireCapableBeanFactory();
// The following line does the magic
ctx.autowireBean(this);
}
...
}
Затем заставьте свои бины расширять этот суперкласс, и вы сможете автоматически связывать бины Spring и использовать область видимости, специфичную для JSF:
@ManagedBean
@ViewScoped
public class MyBackingBean extends AutowireableManagedBean {
@Autowired
private MyDao myDao;
Дополнительная информация в этой статье: http://www.beyondjava.net/blog/integrate-jsf-2-spring-3-nicely/