2010-04-21 127 views
5

我正在开发一个Web服务,它将由我写的客户端调用。在Web服务中,我需要使用应用程序范围内的对象来减轻系统上应用程序的负担。我已经实现了我的应用程序范围的对象,如this question所示。从Web服务访问FacesContext

我可以在jsf页面中使用我的对象,没有问题,如下所示。

MyObject mo = (MyObject) FacesContext.getCurrentInstance().getExternalContext().getApplicationMap().get("MyObjectsName"); 

但是,当涉及到在Web服务请求中使用它时FacesContext.getCurrentInstance()返回null。有什么方法可以在Web服务中使用FacesContext。

+1

你的webservice基于什么API?它是否在同一个容器/上下文中运行? – BalusC 2010-04-21 16:23:27

+0

我正在使用jax-ws,但我没有考虑容器。 – scriptmonster 2010-04-21 22:07:40

回答

5

它为空,因为Web服务不通过Faces Servlet。这应该是这样的,因为Web服务与JSF无关。

如果您使用的是JAX-WS的实现,你可以使用:

@Resource 
WebServiceContext context; 

这将注入WebServiceContext,通过它你可以:

ServletContext servletContext = (ServletContext) 
    context.getMessageContext().get(MessageContext.SERVLET_CONTEXT); 

而且具有ServletContext,你可以访问您的应用程序范围对象。

+0

我会尽快试一试。谢谢。 – scriptmonster 2010-04-21 22:12:33

+0

如果我使用JAX RS并且我想访问viewscoped bean,有没有办法实现,Bozho? – 2014-04-27 10:53:34