我使用的方法是将托管 bean 保留在 JSF 容器中,并通过托管属性上的 EL 将 Spring bean 注入其中。请参阅相关问题。
为此,请在 中设置SpringBeanFacesELResolver ,faces-config.xml
以便 JSF EL 可以解析 Spring bean:
<application>
...
<el-resolver>org.springframework.web.jsf.el.SpringBeanFacesELResolver</el-resolver>
...
</application>
之后,您可以像这样在 @ManagedBean 注释的 bean 中注入 Spring bean:
@ManagedBean
@ViewScoped
public class SomeMB {
// this will inject Spring bean with id someSpringService
@ManagedProperty("#{someSpringService}")
private SomeSpringService someSpringService;
// getter and setter for managed-property
public void setSomeSpringService(SomeSpringService s){
this.someSpringService = s;
}
public SomeSpringService getSomeSpringService(){
return this.someSpringService;
}
}
可能有比这更好的方法,但这是我最近一直在使用的方法。