【问题标题】:JSF2 Managed Bean Reference Problem: CDI Injection?JSF2 托管 Bean 参考问题:CDI 注入?
【发布时间】:2011-10-16 00:25:05
【问题描述】:

我有一个名为:

@ManagedBean(name="configBean")
@SessionScoped
public class configBean implements Serializable { 

实例化一个类/bean(不是托管bean,它是一个标准类):

com.package.class variableName = new com.package.class(); 

& 从这个类中创建/设置了一些对象,例如:

variableName.setCached( true );

我还有另一个 bean,目前简称为:

@ManagedBean(name="testBean")
@SessionScoped
public class testBean implements Serializable { 

& 基本上我想在我的 testBean 中引用/实现“variableName”实例化,如下所示:

    if( !( variableName.isCached() ) )
     {
        System.out.println( "cry yourself to sleep foo..");
     }
  else
    { 
        System.out.println( "your not as useless as you look");
    }

从我所看到的看起来好像 Bean Injection 是我正在寻找的?但是我还没有让它工作,所以希望有人能举一个简单的例子,所以我知道我在正确的路线上!

干杯

【问题讨论】:

  • 请改用System.out.println("variableName.isCached(): " + variableName.isCached())。不那么可爱,但更简洁。

标签: java jsf jakarta-ee jsf-2 cdi


【解决方案1】:

testBean 中的以下代码

private configBean configBean;

@ManagedProperty(value="configBean")
public configBean getConfigBean()
{
    return configBean;
}

public void setConfigBean(configBean configBean)
{
    this.configBean = configBean;
}

然后你就可以访问 variableName 了

configBean.getVariableName();

【讨论】:

    【解决方案2】:

    由于configBeantestBean 都是托管bean,您可以像这样引用它们:

    @ManagedBean(name="testBean")
    @SessionScoped
    public class testBean implements Serializable { 
    
       @ManagedProperty(value="#{configBean}")
       private ConfigBean configBean;
    
       ....
    
       ... configBean.getVariableName().isCached()...
    }
    

    【讨论】:

    • 嗯,这就是我的想法,我一直在玩,但我得到一个“无法实例化类:com.package.testBean。”,堆栈跟踪说:“导致作者:java.lang.NullPointerException'.. 有什么想法吗?
    • 那你testBean中的构造函数有问题(顺便说一句,应该叫TestBean,约定是个好东西)
    猜你喜欢
    • 2015-08-06
    • 2011-07-14
    • 2015-03-11
    • 2017-02-16
    • 1970-01-01
    • 2013-09-01
    • 2015-04-20
    • 1970-01-01
    • 2016-07-09
    相关资源
    最近更新 更多