我在另一个类中使用一个Java类时遇到了一些麻烦。
对于我的应用程序,我已为实用程序类设置了托管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>
在这个类中有一个写入日志的方法。
现在我想在另一个类中使用这个类。所以我的想法是将上面的托管bean注入另一个托管bean中。
<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>
Order类有字段
public Utils utils;
public Utils getUtils() {
return utils;
}
public void setUtils(Utils utils) {
this.utils = utils;
}
但是在构造函数中它已经错了:
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:无法实例化类:&#39; com.acme.domino.app.orderBean&#39; .. null 无法实例化类:&#39; com.acme.domino.app.orderBean&#39; .. null class com.acme.domino.app.orderBean:java.lang.NullPointerException
我想让我的Order类继承通过Managed Bean设置的Utils类。
答案 0 :(得分:1)
faces-config.xml
中有一个拼写错误。您尝试注入<value>#{utilsBean}</value>
,但utilsBean
不是正确的引用,utilBean
是。没有。那么你以后在构造函数中做的事情就没有必要了。托管bean被称为托管,因为框架在被“调用”时实例化它们。因此,框架将调用Order类的setUtils
并传递已根据faces-config.xml定义创建的Utils bean对象。
答案 1 :(得分:0)
而不是:
utils = new Utils();
尝试:
Utils utils = (Utils)ExtLibUtil.resolveVariable(FacesContext.getCurrentInstance(), "utilBean");
从java读取托管bean的更多背景知识: XPages: How to acces an application scope bean from a session scope bean