面部流不能与@Named一起使用

时间:2014-04-12 17:21:58

标签: java java-ee jsf-2.2

我只是在玩Java EE7教程中的simple-flow示例。它有以下bean:

import javax.faces.bean.ManagedBean;

@ManagedBean
public class FlowScope {

    private String value;

    public String getValue() {
        return value;
    }

    public void setValue(String value) {
        this.value = value;
    }
}

以及以下范围目录结构:

simple-flow
     simple-flow.xhtml
     simple-flow-flow.xhtml ;; this file is empty
     simple-flow-return.xhml 

只要请求范围bean使用javax.faces.bean.ManagedBean注释,它就可以工作。但如果我使用@Named,它就会停止工作。由于将来可能会删除javax.faces.bean.ManagedBean注释,因此我想知道如何在不使用ManagedBean注释的情况下使其工作。

BTW:我正在使用JBoss Wildfly作为容器。

此致   罗杰

1 个答案:

答案 0 :(得分:2)

如果您使用@Named,您的bean将由CDI管理。为此,您需要在项目中实施CDI。如果您在Java EE 6(或7如果可用)容器(如TomEE)上运行应用程序,则默认情况下可以使用Glassfish或JBoss CDI。如果您只使用像Tomcat或Jetty这样的servlet容器,则必须自己添加像Apache OpenWebBeans或Weld这样的CDI实现(或者考虑使用TomEE)。

要获取CDI请求范围的bean,您必须像这样注释您的类:

@javax.inject.Named
@javax.enterprise.context.RequestScoped
public class MyBean {
    ...
}

JSF 2.2还提供带有CDI的流范围bean。绑定到流simple-flow的流范围bean将如下所示:

@javax.inject.Named
@javax.faces.flow.FlowScoped(value="simple-flow")
public class MyBean {
    ...
}