如何让Java类继承由托管Bean配置的另一个类的属性值
解决Java类继承托管Bean属性值的问题
嘿,我来帮你搞定这个问题!你已经配置了一个session作用域的托管Bean utilBean,现在想让另一个类复用它的属性值,这里有几个实用的方案:
1. 依赖注入(最推荐的标准做法)
如果你的目标类也是一个JSF托管Bean,直接用@ManagedProperty把配置好的utilBean注入进来就行,这样它带的debug=false属性直接就能用:
import javax.faces.bean.ManagedBean; import javax.faces.bean.ManagedProperty; import javax.faces.bean.SessionScoped; @ManagedBean @SessionScoped public class YourTargetBean { // 注入已配置好的utilBean实例 @ManagedProperty("#{utilBean}") private Utils utilBean; // 必须提供setter方法,JSF容器需要通过它完成注入 public void setUtilBean(Utils utilBean) { this.utilBean = utilBean; } // 示例方法:使用utilBean的属性 public void checkDebugMode() { Boolean isDebug = utilBean.getDebug(); // 这里就可以用这个配置好的属性值做逻辑处理了 } }
这种方式完全交给容器管理,不用手动处理实例化,是JSF里复用托管Bean属性的最佳方式。
2. 非托管Bean手动获取实例
如果你的目标类是普通POJO(不是容器管理的Bean),可以通过JSF上下文从session作用域里取出utilBean的实例,进而拿到它的属性:
import javax.faces.context.FacesContext; public class YourPlainJavaClass { public void useUtilProperties() { // 从session作用域获取已配置的utilBean实例 Utils utilBean = (Utils) FacesContext.getCurrentInstance() .getExternalContext() .getSessionMap() .get("utilBean"); if (utilBean != null) { Boolean debugValue = utilBean.getDebug(); // 在这里使用属性值 } } }
注意:这种方法要确保在JSF请求上下文存在的时候调用,不然FacesContext.getCurrentInstance()可能返回null(比如在后台线程里调用就不行)。
3. 类继承+复用配置值
如果想让目标类直接继承Utils的属性,可以让目标类extends Utils,然后把它也配置成托管Bean,并且复用utilBean的属性值:
首先是Java类:
public class YourTargetClass extends Utils { // 这里可以直接继承Utils的所有属性和方法 }
然后在托管Bean配置里引用utilBean的属性:
<managed-bean> <managed-bean-name>targetBean</managed-bean-name> <managed-bean-class>com.acme.domino.YourTargetClass</managed-bean-class> <managed-bean-scope>session</managed-bean-scope> <!-- 直接复用utilBean的debug属性值 --> <managed-property> <property-name>debug</property-name> <value>#{utilBean.debug}</value> </managed-property> </managed-bean>
这样targetBean实例就会继承Utils的结构,同时拥有和utilBean一致的debug属性值。
内容的提问来源于stack exchange,提问作者Malin
相关产品推荐
相关产品推荐

