【问题标题】:Access JSF2 Managed Bean from RESTful Web Service从 RESTful Web 服务访问 JSF2 托管 Bean
【发布时间】:2012-09-20 10:23:59
【问题描述】:

我有一个应用程序范围的托管 bean,其中包含从数据库读取的列表。每当另一个应用程序对数据库进行更改时,它应该触发 Web 服务来更新托管 bean 中的列表。

我试过了

FacesContext context = FacesContext.getCurrentInstance();
ApplicationBean application= (ApplicationBean) context.getApplication().evaluateExpressionGet(context, "#{applicationBean}", ApplicationBean.class);

上下文变量为空,可能是因为未在 JSF 上下文中调用 Web 服务。

REST 资源类如下所示:

@Path("/application")
public class ApplicationResource {

@PUT
@Path("{id}")
@Consumes(MediaType.TEXT_PLAIN)
@Produces(MediaType.TEXT_PLAIN)
public void updateIdCache(@PathParam("id") String internalid) {
    ApplicationBean application = ???;
    application.update(id);
    return;
}

}

使用的应用服务器是tomcat 6,如何正确完成?

感谢和问候

【问题讨论】:

  • 你能从你的应用服务器使用 CDI 吗?
  • @perissf 好吧,它只是一个 tomcat,不是一个完整的 Java EE 应用服务器,但是 JSF2 和 JAX-WS 注释确实可以工作。
  • Tomcat 现在还有一个来自 Apache 的 Java EE 发行版,名为 TomEE。包括 JSF 和 CDI,并通过 JBoss 或 GlassFish 等认证。

标签: java rest tomcat jsf-2 managed-bean


【解决方案1】:

不要认为 JSF 托管 bean 可以实现您想要的。

CDI bean 有这个功能。

带有 CDI 的 JAX-WS:

http://weblogs.java.net/blog/jitu/archive/2010/02/19/jax-ws-cdi-java-ee-6-0

CDI实现焊接常用: 开始使用weld(包括tomcat 6) http://docs.jboss.org/weld/reference/1.0.0/en-US/html/gettingstarted.html

顺便说一句,我喜欢使用 CDI,我只使用 tomcat 6/7

【讨论】:

  • 那么,您的建议是将带有数据的列表放入 CDI bean 中吗?然后需要重写 JSF 东西以从 CDI bean 而不是 JSF 托管 bean 获取数据,这应该是可能的,对吗?
猜你喜欢
  • 1970-01-01
  • 2011-09-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-10-16
  • 1970-01-01
  • 2011-08-10
  • 2011-11-01
相关资源
最近更新 更多