2011-06-08 67 views
3

如何從Java類獲得Spring MessageContext獲取Spring消息上下文

我應該使用一些@Resource@Autowire注入context VAR上課或者,例如,使用一些全球範圍內SpringContext或其他一些爲了得到MessageContext

什麼是方法?

+0

您是否正在使用SWS?如果是這樣,哪個版本?你想在哪裏訪問MessageContext,客戶端/服務器? – abalogh 2011-06-08 08:57:58

+0

我需要從具有從.xhtml(即jsf頁面)調用的ActioListener參數的方法從Java bean中獲取MessageContext。我使用Spring web-flow。 – sergionni 2011-06-08 09:01:22

回答

3

我通過讀什麼standard method of doing this is開始和嘗試:

@Resource WebServiceContext wsContext; 

@WebMethod public String echoHello(String msg) { 
    MessageContext context = wsContext.getMessageContext(); 

    ... 
} 

這是如何做到這一點在服務器端。在客戶端,請求和響應上下文只是從服務存根中檢索到的簡單地圖(即使沒有明確要求,也會實現BindingProvider);他們不需要MessageContext添加的範圍管理。

+0

看起來像,我需要,儘快給你反饋 – sergionni 2011-06-08 09:25:04

+2

我認爲@sergionni意味着另一個[MessageContext](http://static.springsource.org/spring-webflow/docs/2.0.x/javadoc-api /org/springframework/binding/message/MessageContext.html)。 – Roadrunner 2011-06-08 10:52:41

3

如果我理解正確您正在使用JSF的Spring Webflow並需要從JSF ActionListener內部訪問Webflow MessageContext

如果是這樣,您可以隨時使用RequestContextHolder(注意使用從一個Webflow的一個,因爲Spring MVC有它自己的!),但它使用ThreadLocal所以它不是太高雅了:

MessageContext messageContext = 
    RequestContextHolder.getRequestContext().getMessageContext(); 

你不能使用標準DI,因爲MessageContext每個請求由FlowExecutor在每個流量啓動或恢復時創建,使用MessageSource。在Service.java

<transition on="search"> 
    <evaluate expression="service.search(service.id, messageContext)" result="scope" /> 
    </transition>` 

可以使用MessageContext的現在:

+0

是的,看起來像這樣 – sergionni 2011-06-08 12:13:36

+0

在新版本中,RequestContextHolder.getRequestContext()不再可用。 – olivmir 2017-02-24 10:06:50

0
在flow.xml

添加MessageContext的這個樣子。

public List search(String serviceId, MessageContext messageContext) {  
    ...  
    messageContext.addMessage(
    ... 
}