当前位置: 首页 > 知识库问答 >
问题:

将CDI bean注入JSF@ViewScoped bean

易祖鹤
2023-03-14

我有一个JSF的问题,CDI项目。我做了大量研究,发现在CDI中没有@viewedscoped注释。我用对话框解决基于ajax的页面的问题。我想将变量从DataTable传递到dialog。为此,我不能使用@requestedscopedbean,因为在请求结束后会丢弃值。有人能帮我解决吗?我不能使用@sessionscoped,但这是一个糟糕的做法。或者只保存这一个变量到会话谁知道。你们能给我一些提示如何优雅地解决这个问题吗?

import javax.enterprise.context.ApplicationScoped;    
@ApplicationScoped
public class ServiceBean implements Serializable {
...
import javax.faces.bean.ManagedBean;
import javax.faces.bean.ViewScoped;

@ManagedBean
@ViewScoped
public class SomeBean {

@Inject
ServiceBean serviceBean;


@Postconstruct ...

以下是错误消息:

com.sun.faces.mgbean.ManagedBeanCreationException: An error occurred performing resource injection on managed bean warDetailBean

共有1个答案

詹夕
2023-03-14

首先,如果您试图使用CDI,您需要通过在应用程序中放置web-inf/beans.xml文件来激活它(注意,该文件可以为空),有关该文件的更多信息可以在Weld-JSR-299参考实现中找到。

当您正在使用Tomcat时,请按照如何在Tomcat中安装CDI中的步骤,确保遵守所有配置要求?

其次,即使您可以在JSF托管bean中使用@inject,也最好不要混合使用JSF托管bean和CDI,请参阅Balusc关于视域JSF和CDI bean的详细答案。

因此,如果您只想使用CDI@namedbean,可以使用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@named bean中的ManagedProperty返回null
  • OmniFaces CDI视图范围
 类似资料:
  • 看完这些,, 在哪里使用EJB3.1和CDI 下面的事情我还不明白,如果我错了,请纠正我。 与bean在同一个包中的所有类。xml是CDIBean,除了注释为session/message/singleton的类之外 非常感谢。:)

  • 我配置了一个bean,它有一些初始化逻辑。我已经使用@Application ationScoped注释注释了这个bean。但不知何故,cdi并没有选择这个豆子。 beans.xml内容: Bean文件: 读取配置文件的代码: 我使用:cdiL:进行依赖项注入,apachedeltaspike:读取配置文件。野蝇群:服务器

  • 我正在开发一个遗留的JSF应用程序,我们正在慢慢地将其移植到Spring MVC。我们正在使用Spring Security来控制登录信息。在用户登录之后,JSF页面全局地实例化一个在任何地方都使用的会话作用域bean。我想更改应用程序,这样我们就可以先进入用Spring MVC开发的页面。 我尝试的一种方法是将bean转换为spring bean,并将其注入JSF,但不幸的是,这需要对bean进

  • 经过一些实验,我已经能够使用和一些EL将我的GET参数注入到(因此是JSF)bean中。 现在,除了从,我无法将GET参数注入(即CDI-)bean。 因此,我一直在阅读有关JSF豆和CDI豆的优缺点。简而言之,我被两个问题困住了:第一。与 CDI bean 相比,使用 JSF bean 时会遇到任何缺点吗?2nd. 如果是这样,有没有一种干净的方法可以将我的 GET 参数注入到 CDI bean

  • 问题内容: 我有一个会话范围的bean 我在一个过滤器中注入了对象… 但是,我在下一次交互中融合了SessionBean … 但是该属性返回null 我通过CDI注释更改了导入,但仍然无法使用(),与JSF注释(和)相同。 谢谢。 PD:对不起,我的英语! 问题答案: 您不能将用于JSF和CDI的这两个包中的注释混合在一起。两者都反映了不同的注入机制,因此不能在同一bean上混合使用。您必须从同一

  • 问题内容: 我在演示应用程序中使用JSF2 + Spring3.1 + Hibernate4,我将要使用批注创建会话工厂,但我的DAO类未在Jsf Managed Bea类中初始化,因此我得到了Null指针异常。我的 applicationContext.xml UserDAO.java类 和我的ManagedBean类 现在在Managedbean方法中,DAO对象为null,并且我得到了Nul