Java 如何让一个类继承通过托管bean设置的另一个类的值
我在另一个类中使用一个Java类时有点困难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
<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");