I understand that a managed bean works like a controller, because your only task is "link" the View Layer with Model.
To use a bean as a managed bean I must declare @ManagedBean
annotation, doing that I can communicate JSF with bean directly.
If I want to inject some component (from Spring) in this managedBean I have two possibles ways:
Choose the property in ManagedBean (like "BasicDAO dao") and declare @ManagedProperty(#{"basicDAO"})
above the property. Doing it, i'm injecting the bean "basicDAO"
from Spring in ManagedBean.
Declared @Controller in ManagedBean Class, then i'll have @ManagedBean
and @Controller
annotations, all together. And in property "BasicDAO dao"
i must use @Autowired
from Spring.
Is my understanding correct?
There is another way to use Spring-managed beans in JSF-managed beans by simply extending your JSF bean from SpringBeanAutowiringSupport
and Spring will handle the dependency injection.
@ManagedBean // JSF-managed.
@ViewScoped // JSF-managed scope.
public class GoodBean extends SpringBeanAutowiringSupport {
@Autowired
private SpringBeanClass springBeanName; // No setter required.
// springBeanName is now available.
}