我正在使用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>
Run Code Online (Sandbox Code Playgroud)
我想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
}
Run Code Online (Sandbox Code Playgroud)
我知道如何获取com.paquete.BeanMyBeanliteral(this.getClass().getName())和BeanMyBean(this.getClass().getSimpleName()),但我不知道如何获得一个托管名称(Bean的实例).
我怎样才能获得beanInstance1价值?
标准 JSF API 无法提供此信息。您能得到的最好结果是通过以下方式自行遍历所有请求、会话和应用程序范围(代码是从本博客复制的):
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;
}
Run Code Online (Sandbox Code Playgroud)
然而,有一个很大的但是,这在 bean 的构造函数中不起作用,仅仅是因为 JSF 尚未将其放置在任何作用域中!您需要稍后确定它,例如在操作方法中。
public void submit() {
String name = lookupManagedBeanName(this);
// ...
}
Run Code Online (Sandbox Code Playgroud)
与具体问题无关,这是一种设计味道。您认为这是解决方案的具体功能需求肯定需要以不同的方式解决。
| 归档时间: |
|
| 查看次数: |
2738 次 |
| 最近记录: |