2013-01-31 12 views
5

Wszystko działa poprawnie, gdy próbuję pobrać wiadomości w klasie @Controller, ale gdy próbuję uzyskać w celu osiągnięcia tego samego w klasie @Service lub @Component, pojawia się następujący błąd:Nie można pobrać wiadomości z MessageSource poza kontrolerem

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

My Kontroler:

@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"; 
    } 

} 

Moje życzenie:

@Service 
public class TestService { 

    @Autowired 
    private MessageSource message; 

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

} 

Moja Składnik:

@Component 
public class TestComponent { 

    @Autowired 
    private MessageSource message; 

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

} 

Mój config:

<!-- 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 nie jest null zarówno @Service i @Component, ale nie są one w stanie się komunikat (wyjątek powyżej). Moje ogłoszenia:

WebContent/WEB-INF/i18n

  • messages_pt_BR
  • messages_en_US

Naprawdę nie mogę znaleźć problem. Wszelkie sugestie, aby rozwiązać ten problem? Dzięki.

+3

czy komponent bean kontrolera i komponent usługi/komponentu są zadeklarowane w tym samym kontekście? – Kent

+0

@Kent Nie, nie są. Moja konfiguracja jest podzielona na 4 xml. Skanowanie komponentu dla kontrolera odbywa się w jednym xml, a skanowanie komponentów dla usług i komponentów jest w innym xml. Połączyłem je, więc teraz działają dobrze. Czy mógłbyś napisać odpowiedź? Cieszę się, że mogę to zaakceptować. – raonirenosto

+0

ten sam kontekst nie oznacza tego samego pliku xml. – Kent

Odpowiedz

10

Z tego, co opisałeś, domyślam się, że bean kontrolny i messageSource zostały zadeklarowane w tym samym kontekście. tak więc mogą się znaleźć.

Jeśli komponent bean usługi i komponent bean kontrolera nie są zadeklarowane w tym samym kontekście, usługa nie może znaleźć elementu messageSource.

ten sam kontekst nie oznacza tego samego pliku. plik one.xml może zawierać dwa.xml.

W każdym razie, jeśli to zadziałało, to dobrze.

Powiązane problemy