春天管理JSF豆



我正在使用 Spring 管理的 JSF bean,现在我必须在 Spring 或 JSF Ex.@scope使用注释标签吗?

我注意到@ViewScoped哪个是 JSF 注释不起作用并且仍然表现为请求范围?

如果你使用 org.springframework.web.jsf.el.SpringBeanFacesELResolver 进行 Spring + JSF 集成,那么你需要用org.springframework.context.annotation.Scope注释来标记范围。

Spring 中没有 View 范围,但我们可以自定义实现这样的范围。参考这个或这个

阅读本文: 本文中的信息: http://www.beyondjava.net/blog/integrate-jsf-2-spring-3-nicely/

我这样做了:

为 JSF 支持的 bean 定义一个抽象超类,如下所示:

public abstract class AutowireableManagedBean {
    protected Logger logger = LoggerFactory.getLogger(getClass());
    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);
    }
   ...
}

然后,让你的后备 bean 扩展该超类,你将能够自动连接 Spring bean 并利用特定于 JSF 的视图范围:

@ManagedBean
@ViewScoped
public class MyBackingBean extends AutowireableManagedBean {
    @Autowired
    private MyDao myDao;

最新更新