Java 如何让一个类继承通过托管bean设置的另一个类的值

Java 如何让一个类继承通过托管bean设置的另一个类的值,java,xpages,Java,Xpages,我在另一个类中使用一个Java类时有点困难 <managed-bean> <managed-bean-name>orderBean</managed-bean-name> <managed-bean-class>com.acme.domino.app.Order</managed-bean-class> <managed-bean-scope>session</managed-bean-scop

我在另一个类中使用一个Java类时有点困难

<managed-bean>
    <managed-bean-name>orderBean</managed-bean-name>
    <managed-bean-class>com.acme.domino.app.Order</managed-bean-class>
    <managed-bean-scope>session</managed-bean-scope>
    <managed-property>
      <property-name>utils</property-name>
      <value>#{utilsBean}</value>
    </managed-property>
  </managed-bean>
对于我的应用程序,我为实用程序类设置了一个托管bean:

<managed-bean>
    <managed-bean-name>utilBean</managed-bean-name>
    <managed-bean-class>com.acme.domino.utils.Utils</managed-bean-class>
    <managed-bean-scope>session</managed-bean-scope>
    <managed-property>
      <property-name>debug</property-name>
      <value>false</value>
      <property-class>java.lang.Boolean</property-class>
    </managed-property>    
    <managed-property>
      <property-name>log</property-name>
      <value>false</value>
      <property-class>java.lang.Boolean</property-class>
    </managed-property>
  </managed-bean>
但在构造函数中,它已经出错了:

public Order() throws Exception {
        super();
        utils = new Utils();

        System.out.println("log?? " + utils.log);
..}
似乎在Utils类的构造函数中,我必须以某种方式设置两个字段:

public Utils() {
        this.debug = true;
        this.log = true;
}
在Utils类中,字段的值为false(通过托管属性设置)

在Orders类中,字段的值为true(通过Utils构造函数设置)

有没有办法避免在Utils构造函数中设置字段?或者有没有办法避免在Order类中定义Utils类的新实例

当我没有在Utils构造函数类中设置字段时,我得到的消息是:

javax.faces.FacesException:无法实例化类:“com.acme.domino.app.orderBean”…null 无法实例化类:“com.acme.domino.app.orderBean”…null 类com.acme.domino.app.orderBean:java.lang.NullPointerException

我希望我的Order类通过托管Bean继承Utils类集的设置。

而不是:

utils = new Utils();
尝试:

有关从java读取托管bean的更多背景信息:
您的
faces config.xml
中有一个输入错误。您正在尝试注入
{utilsBean}
但是
utilsBean
不是正确的引用,
utilBean
是.No.s。那么您以后在构造函数中所做的事情就没有必要了。托管bean被称为托管bean,因为框架在“调用”它们的那一刻就实例化了它们因此,框架将调用Order类的
setUtils
,并传递已经根据faces-config.xml定义创建的Utils bean对象。

True。使用“resolveVariable”代码,您可以从一个bean访问另一个bean。这也是我更喜欢的方法。为了方便起见,我总是添加一个函数来获取bean类的实例:在
Utils
类中创建一个函数
public static Utils get(){return(Utils)ExtLibUtil.resolve variable(facescontex.getCurrentInstance(),“utilBean”);}
。在
Order
类中,您只需执行
Utils Utils=Utils.get();
获取bean。这是正确的方法,也是托管bean和属性的用途。
utils = new Utils();
Utils utils = (Utils)ExtLibUtil.resolveVariable(FacesContext.getCurrentInstance(), "utilBean");