gpt4 book ai didi

jsf - 将 CDI bean 注入(inject) JSF @ViewScoped bean

转载 作者:行者123 更新时间:2023-12-04 16:52:28 50 4
gpt4 key购买 nike

我对 JSF、CDI 项目有疑问。我做了很多研究,发现在 CDI 中没有 @ViewedScoped注解。我用对话框解决了基于 ajax 的页面的问题。我想将变量从数据表传递给对话框。为此,我不能使用 @RequestedScoped bean,因为值在请求结束后被丢弃。谁能帮我解决它?我无法使用 @SessionScoped但恕我直言,这是一种不好的做法。或者也许只将这一个变量保存到知道的 session 中。你们能给我任何提示如何优雅地解决这个问题吗?

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

最佳答案

第一 , 如果您尝试使用 CDI,您需要通过输入 WEB-INF/beans.xml 来激活它。应用程序中的文件(请注意,此文件可以为空),有关该文件的更多信息可以在 Weld - JSR-299 Reference Implementation 中找到.

当您使用 Tomcat 时,请务必按照 How to install CDI in Tomcat? 中的步骤执行所有配置要求。

第二 , 即使你可以使用 @Inject在 JSF 托管 bean 中,最好不要混合 JSF 托管 bean 和 CDI,请参阅 BalusC 关于 Viewscoped JSF and CDI bean 的详细回答.

因此,如果您只想使用 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注入(inject)属性:
import javax.faces.bean.ManagedBean;
import javax.faces.bean.ViewScoped;

@ManagedBean
@ViewScoped
public class SomeBean{

@ManagedProperty(value = "#{serviceBean}")
ServiceBean serviceBean;

}

也可以看看:
  • ManagedProperty in CDI @Named bean returns null
  • Omnifaces CDI ViewScoped
  • 关于jsf - 将 CDI bean 注入(inject) JSF @ViewScoped bean,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28516750/

    50 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com