在自定义 ELResolver 中设置返回实例的范围
Set scope of returned instance in custom ELResolver
我编写了一个自定义 ELResolver,其中 returns 是会话 Bean 的一个实例。我通过 JNDI 查找一个 bean。 getValue 方法如下所示:
@Override
public Object getValue(ELContext ctx, Object base, Object prop) {
if (null == base) {
Object bean = resolveBean((String) prop);
if (null != bean) {
ctx.setPropertyResolved(true);
return bean;
}
}
return null;
}
private Object resolveBean(String beanName) {
\Search in a RegistryService if such an bean exists
for (ModulDescriptor md : loader.getDescriptors()) {
for (MenuItem mi : md.getMenuItems()) {
if (mi.getElBeanName().equals(beanName)) {
Object bean = null;
try {
\If exists lookup and return
bean = InitialContext.doLookup("java:global/ModulA/" + mi.getJndiBeanName());
} catch (NamingException e) {
e.printStackTrace();
}
return bean;
}
}
}
return null;
}
目前为止一切正常。现在我的问题:
看起来为查找的 bean 设置哪个范围并不重要。它的行为总是像一个 SessionScope bean。
有没有办法为这样的构造设置范围? (例如 RequestScope 或 ViewScope)
自定义 ELResolver 返回的元素的 "default scope" 是什么?它只是保存在 SessionMap 中吗?
版本堆栈:
甲骨文 JDK 1.8.0_91 x64
Java EE 7 (Wildfly 10)
基于 Mojarra 的 JSF 2.2
EJB 3.2
CDI 1.2(焊接 2.3.4 最终版本)
好的,EL 解析器似乎是错误的方法。我现在使用面孔上下文(RequeatMap、SessionMap、ViewMap 和 ApplicationMap)提供的映射。对象现在已正确释放。
在我的例子中,我使用自定义 ResourceHandler 并在那里添加相应的 bean。
如果有人需要代码示例,请毫不犹豫地索取。
我编写了一个自定义 ELResolver,其中 returns 是会话 Bean 的一个实例。我通过 JNDI 查找一个 bean。 getValue 方法如下所示:
@Override
public Object getValue(ELContext ctx, Object base, Object prop) {
if (null == base) {
Object bean = resolveBean((String) prop);
if (null != bean) {
ctx.setPropertyResolved(true);
return bean;
}
}
return null;
}
private Object resolveBean(String beanName) {
\Search in a RegistryService if such an bean exists
for (ModulDescriptor md : loader.getDescriptors()) {
for (MenuItem mi : md.getMenuItems()) {
if (mi.getElBeanName().equals(beanName)) {
Object bean = null;
try {
\If exists lookup and return
bean = InitialContext.doLookup("java:global/ModulA/" + mi.getJndiBeanName());
} catch (NamingException e) {
e.printStackTrace();
}
return bean;
}
}
}
return null;
}
目前为止一切正常。现在我的问题:
看起来为查找的 bean 设置哪个范围并不重要。它的行为总是像一个 SessionScope bean。
有没有办法为这样的构造设置范围? (例如 RequestScope 或 ViewScope)
自定义 ELResolver 返回的元素的 "default scope" 是什么?它只是保存在 SessionMap 中吗?
版本堆栈:
甲骨文 JDK 1.8.0_91 x64
Java EE 7 (Wildfly 10)
基于 Mojarra 的 JSF 2.2
EJB 3.2
CDI 1.2(焊接 2.3.4 最终版本)
好的,EL 解析器似乎是错误的方法。我现在使用面孔上下文(RequeatMap、SessionMap、ViewMap 和 ApplicationMap)提供的映射。对象现在已正确释放。 在我的例子中,我使用自定义 ResourceHandler 并在那里添加相应的 bean。
如果有人需要代码示例,请毫不犹豫地索取。