2013-01-31 14 views
5

@Controllerクラスでメッセージを取得しようとするとすべてうまく動作しますが、 を試してみると、@Serviceまたは@Componentクラスで同じ結果が得られます。コントローラ外のメッセージソースからメッセージを取得できません

org.springframework.context.NoSuchMessageException: 
No message found under code 'email.ativacao.title' for locale 'pt_BR'. 

マイコントローラー:

@Controller 
public class TestController { 

    @Autowired 
    TestService service; 

    @Autowired 
    TestComponent component; 

    @Autowired 
    private MessageSource message; 

    @RequestMapping(value = "/send", method = RequestMethod.GET) 
    public String go() { 

      String message = message.getMessage 
        ("email.ativacao.title", null, new Locale("pt", "BR")); 

      service.getMessage(); 

      component.getMessage(); 

      return "signsucess"; 
    } 

} 

マイサービス:

@Service 
public class TestService { 

    @Autowired 
    private MessageSource message; 

    public void getMessage() { 
     //Error 
     String message = message. 
      getMessage("email.ativacao.title", null, new Locale("pt", "BR")); 
    } 

} 

マイコンポーネント:

@Component 
public class TestComponent { 

    @Autowired 
    private MessageSource message; 

    public void getMessage() { 
     //Error 
     String message = message. 
      getMessage("email.ativacao.title", null, new Locale("pt", "BR")); 
    } 

} 

私の設定は:

<!-- i18n --> 
<mvc:interceptors> 
    <bean class="org.springframework.web.servlet.i18n. 
       LocaleChangeInterceptor" p:paramName="lang"/> 
</mvc:interceptors> 

<!-- Mesage Source Config -->  
<bean id="messageSource" 
    class="org.springframework.context.support. 
     ReloadableResourceBundleMessageSource" p:fallbackToSystemLocale="true" > 
    <property name="basename" value="WEB-INF/i18n/messages" /> 
</bean> 

<!-- Mapeia o cookie que irá salvar as opções de idioma --> 
<bean class="org.springframework.web.servlet.i18n.CookieLocaleResolver" 
    id="localeResolver" p:cookieName="locale"/> 

MessageSourceは@Serviceと@Component両方にnullではないが、彼らは メッセージ(上記の例外)を取得することはできません。私のプロパティ:

のWebContent/WEB-INF/i18nの

  • messages_pt_BR
  • messages_en_US

私は実際に問題を見つけることができません。これを解決するための提案はありますか?ありがとう。

+3

は、同じコンテキストで宣言されたコントローラBeanとサービス/コンポーネントBeanですか? – Kent

+0

@Kentいいえ、そうではありません。私の設定は4 xmlで分割されています。コントローラーのコンポーネントスキャンは1つのxmlにあり、コンポーネントスキャンはサービスとコンポーネントが別のxmlにあります。私はそれらをまとめるので、今彼らは正常に動作しています。答えを書きますか?私はそれを受け入れることをうれしく思います。 – raonirenosto

+0

同じコンテキストが同じxmlファイルを意味するわけではありません。 – Kent

答えて

10

あなたが説明していたことから、コントローラBeanとmessageSourceが同じコンテキストで宣言されたと思います。それで、お互いを見つけることができます。

サービスBeanとコントローラBeanが同じコンテキストで宣言されていない場合、サービスはmessageSourceを見つけることができません。

同じ文脈が同じファイルを意味するわけではありません。 one.xmlにはtwo.xmlを含めることができます。

とにかく、それがうまくいけばいいです。

関連する問題