2010-04-21 176 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