gpt4 book ai didi

jsf - 如何从支持 bean 内部获取托管 bean 名称?

转载 作者:行者123 更新时间:2023-12-04 20:20:22 24 4
gpt4 key购买 nike

我正在使用 JSF 1.1。我的 faces-config.xml 中有以下内容文件:

<managed-bean>
<managed-bean-name>beanInstance1</managed-bean-name>
<managed-bean-class>com.paquete.BeanMyBean</managed-bean-class>
<managed-bean-scope>request</managed-bean-scope>
</managed-bean>

我想获取托管 bean 名称 beanInstance1在我的 bean 里面。这是我的 bean :
package com.paquete;

public class BeanMyBean {
String atribute1;

public BeanMyBean () {
System.out.println("managed-bean-class="+this.getClass().getName());
System.out.println("managed-bean-name="+????????????????????????);
// How Can I get the "beanInstance1" literal from here??
}

// setters and getters
}

我知道如何获取 com.paquete.BeanMyBean文字( this.getClass().getName() )和 BeanMyBean ( this.getClass().getSimpleName() ),但我不知道如何获得托管名称(Bean 的实例)。

我如何获得 beanInstance1值(value)?

最佳答案

标准 JSF API 不提供此信息。你能得到的最好的方法是通过以下方式自己遍历所有请求、 session 和应用程序范围(代码是从 this blog 复制的):

public static String lookupManagedBeanName(Object bean) {
ExternalContext externalContext = FacesContext.getCurrentInstance().getExternalContext();
Map<String, Object> requestMap = externalContext.getRequestMap();

for (String key : requestMap.keySet()) {
if (bean.equals(requestMap.get(key))) {
return key;
}
}

Map<String, Object> sessionMap = externalContext.getSessionMap();
for (String key : sessionMap.keySet()) {
if (bean.equals(sessionMap.get(key))) {
return key;
}
}

Map<String, Object> applicationMap = externalContext.getApplicationMap();
for (String key : applicationMap.keySet()) {
if (bean.equals(applicationMap.get(key))) {
return key;
}
}

return null;
}

然而,有一个很大的 但是 ,这在 bean 的构造函数中不起作用,因为 JSF 还没有将它放在任何作用域中!您需要稍后确定它,例如在一个 Action 方法中。
public void submit() {
String name = lookupManagedBeanName(this);
// ...
}

无关 对于具体问题,这是一种设计味道。您认为这是解决方案的具体功能需求肯定必须以不同的方式解决。

关于jsf - 如何从支持 bean 内部获取托管 bean 名称?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7262864/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com