我只是在玩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作为容器。
此致 罗杰
答案 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 {
...
}