首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >在任何与Servlet相关的类中按名称获取JSF托管bean

在任何与Servlet相关的类中按名称获取JSF托管bean
EN

Stack Overflow用户
提问于 2010-04-14 04:53:33
回答 5查看 154K关注 0票数 102

我正在尝试编写一个自定义servlet (用于AJAX/JSON),在其中我希望通过名称引用我的@ManagedBeans。我希望映射到:

http://host/app/myBean/myProperty

至:

代码语言:javascript
复制
@ManagedBean(name="myBean")
public class MyBean {
    public String getMyProperty();
}

可以从常规的servlet按名称加载bean吗?有没有我可以使用的JSF servlet或helper?

我似乎被Spring宠坏了,在Spring中,所有这些都太明显了。

EN

回答 5

Stack Overflow用户

发布于 2012-12-11 02:10:30

我使用以下方法:

代码语言:javascript
复制
public static <T> T getBean(final String beanName, final Class<T> clazz) {
    ELContext elContext = FacesContext.getCurrentInstance().getELContext();
    return (T) FacesContext.getCurrentInstance().getApplication().getELResolver().getValue(elContext, null, beanName);
}

这允许我以类型化的方式获取返回的对象。

票数 11
EN

Stack Overflow用户

发布于 2010-04-14 05:10:02

你有没有在这个链接上尝试过类似的方法?我不确定createValueBinding()是否仍然可用,但是像这样的代码应该可以从普通的旧Servlet访问。这确实要求bean已经存在。

http://www.coderanch.com/t/211706/JSF/java/access-managed-bean-JSF-from

代码语言:javascript
复制
 FacesContext context = FacesContext.getCurrentInstance();  
 Application app = context.getApplication();
 // May be deprecated
 ValueBinding binding = app.createValueBinding("#{" + expr + "}"); 
 Object value = binding.getValue(context);
票数 3
EN

Stack Overflow用户

发布于 2014-07-30 03:50:19

您可以通过传递以下名称来获取托管bean:

代码语言:javascript
复制
public static Object getBean(String beanName){
    Object bean = null;
    FacesContext fc = FacesContext.getCurrentInstance();
    if(fc!=null){
         ELContext elContext = fc.getELContext();
         bean = elContext.getELResolver().getValue(elContext, null, beanName);
    }

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

https://stackoverflow.com/questions/2633112

复制
相关文章

相似问题

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