Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jsf-2/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
将CDIBean注入JSF@ViewScoped bean_Jsf_Jsf 2_Cdi_View Scope - Fatal编程技术网

将CDIBean注入JSF@ViewScoped bean

将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

我对JSF、CDI项目有问题。我做了很多研究,发现CDI中没有
@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;

}
另见:

使用CDI bean或JSF bean。不要不必要地考虑混合使用它们,“我做了大量研究,发现CDI中没有
@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;

}