首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Jsf自定义托管bean即时处理程序

Jsf自定义托管bean即时处理程序
EN

Stack Overflow用户
提问于 2009-12-20 19:08:49
回答 3查看 1.3K关注 0票数 1

哪个JSF1.2组件负责实例化faces-config.xml中指定的托管bean?

我想用我的定制版本替换这个组件,它将在bean实例成功创建后执行一些额外的任务。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2009-12-20 22:33:41

没有一个组件对此负责。这只是EL造成的。如果表达式#{beanname}返回null,它将创建一个与受管bean名称相关联的bean。

在您的特定情况下,解决此问题的正常方法是使用bean的构造函数或使用@PostConstruct注释的bean的公共方法。

代码语言:javascript
复制
public class Bean {

    public Bean() {
        // Put code here which is to be executed during construction, but before      
        // setting of the managed properties (<managed-property> declarations).
    }

    @PostConstruct
    public void init() {
        // Put code here which is to be executed AFTER construction 
        // and the setting of managed properties.
    }

}

如果您真的想自己解决EL问题,那么您可以做的最好的事情就是实现一个自定义的ELResolver。你可以在here上找到一篇关于这方面的文章。

票数 2
EN

Stack Overflow用户

发布于 2009-12-20 23:45:59

以下是JSF 1.2规范中详细介绍的JSP解析器结构:

代码语言:javascript
复制
Faces ELResolver for JSP
|_ faces.ImplicitObjectELResolverForJSP
|_ faces.ManagedBeanELResolver
|_ faces.ResourceBundleELResolver
|_ ELResolvers in application configuration resources
|_ faces.VariableResolverChainWrapper (wraps deprecated API)
|_ faces.PropertyResolverChainWrapper (wraps deprecated API)
|_ ELResolvers from Application.addELResolver()

托管bean将由faces.ManagedBeanELResolver实例化(这只是开发人员可以引用的标签,而不是公共类的名称)。

顶层ELResolver通过Application提供(您可以通过ApplicationFactory提供)。但是,尽管JSF规范详细说明了行为,但API并没有公开用于实例化托管bean的方法。很难修饰实现来消除新实例化的bean和从请求/会话/应用程序范围返回的bean之间的歧义。

BalusC's post为解决这个问题提供了几个很好的策略。

尽管JSF2.0对托管bean工具进行了更改,但据我所知,它并没有更改API的这一方面。

票数 1
EN

Stack Overflow用户

发布于 2010-03-22 13:49:21

@PostConstruct是JSF 1.2的首选。如果您使用的是JavaEE 6,那么您还可以在方法上使用@Produces注解来创建自定义工厂方法。

代码语言:javascript
复制
public class CustomBeanFactory {

        @Produces
        public Bean getBean() {
           Bean bean = new Bean();
           System.out.println("Created new bean.");
           return bean;
        }

}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1935525

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档