将CDIBean注入JSF@ViewScoped bean
我对JSF、CDI项目有问题。我做了很多研究,发现CDI中没有将CDIBean注入JSF@ViewScoped bean,jsf,jsf-2,cdi,view-scope,Jsf,Jsf 2,Cdi,View Scope,我对JSF、CDI项目有问题。我做了很多研究,发现CDI中没有@viewedScope注释。我使用基于ajax的对话框页面解决了这个问题。我想将变量从datatable传递到dialog。为此,我不能使用@RequestedScopedbean,因为在请求结束后该值被丢弃。有人能帮我解决吗?我不能使用@SessionScoped,但我认为这是一种不好的做法。或者可能只将这一个变量保存到会话中,谁知道呢。你们能给我一些提示如何优雅地解决这个问题吗 import javax.enterprise.c
@viewedScope
注释。我使用基于ajax的对话框页面解决了这个问题。我想将变量从datatable传递到dialog。为此,我不能使用@RequestedScoped
bean,因为在请求结束后该值被丢弃。有人能帮我解决吗?我不能使用@SessionScoped
,但我认为这是一种不好的做法。或者可能只将这一个变量保存到会话中,谁知道呢。你们能给我一些提示如何优雅地解决这个问题吗
import javax.enterprise.context.ApplicationScoped;
@ApplicationScoped
public class ServiceBean implements Serializable {
...
以下是错误消息:
com.sun.faces.mgbean.ManagedBeanCreationException: An error occurred performing resource injection on managed bean warDetailBean
首先,如果您试图使用CDI,则需要通过在应用程序中放入
WEB-INF/beans.xml
文件来激活它(请注意,此文件可以为空),有关该文件的更多信息可在中找到
在使用Tomcat时,请确保遵循中的步骤来遵守所有配置要求
Second,即使您可以在JSF管理的bean中使用@Inject
,最好不要混合使用JSF管理的bean和CDI,请参阅BalusC关于这一点的详细回答
因此,如果您只想使用CDI@Named
bean,您可以使用OmniFaces自己的CDI兼容@ViewScoped
:
import javax.inject.Named;
import org.omnifaces.cdi.ViewScoped;
@Named
@ViewScoped
public class SomeBean implements Serializable {
@Inject
ServiceBean serviceBean;
}
或,如果只想使用JSF托管bean,可以使用@ManagedProperty
注入属性:
import javax.faces.bean.ManagedBean;
import javax.faces.bean.ViewScoped;
@ManagedBean
@ViewScoped
public class SomeBean{
@ManagedProperty(value = "#{serviceBean}")
ServiceBean serviceBean;
}
另见:
@viewedScope
注释。”这在JavaEE7之前才是正确的。Java EE 7(JSF 2.2)以JSF视图范围(来自javax.faces.view.ViewScoped
)的风格透明地支持兼容的视图范围(来自javax.faces.bean.ViewScoped
)。我将给OmniFaces多一次机会,因为当我向其添加依赖项时,它会产生错误。CDI设置正确,一切正常。我只需要@viewscope bean。因为我在页面上有很多ajax。@Milkamid请看展示,我想这可能会对你有所帮助:OmniFaces说我没有CDI。但我有它的依赖与焊接实施。我是否需要应用程序服务器,因为我是Tomcat用户?您是否已将WEB-INF/beans.xml文件添加到您的应用程序?在JavaEE7容器中,不需要beans.xml
文件,因为CDI在EE7中默认处于活动状态
import javax.faces.bean.ManagedBean;
import javax.faces.bean.ViewScoped;
@ManagedBean
@ViewScoped
public class SomeBean{
@ManagedProperty(value = "#{serviceBean}")
ServiceBean serviceBean;
}