Saltar al contenido

ResourceBundle no se encuentra para MessageSource cuando se coloca dentro de una carpeta

Después de de una larga búsqueda de información resolvimos este asunto que pueden tener algunos los lectores. Te regalamos la solución y esperamos resultarte de mucha apoyo.

chico, tal vez puedas cambiar la configuración xml de la siguiente manera:

usar

org.springframework.context.support.ReloadableResourceBundleMessageSource

en vez de

org.springframework.context.support.ResourceBundleMessageSource

toda la configuración como esta:


    
    

Cambie su configuración a la siguiente para el bean messageSource en su archivo xml.

 
     
        classpath*:resourcebundles/messages 
     

Dado que todos sus archivos de propiedades están en classpath de java, debe definir la ruta con prefix classpath*: de lo contrario, buscará en el directorio web de su aplicación.

Espero que esto te ayude. Salud.

Es casi 2015 ahora y estoy usando Spring 4.1.2.RELEASE y definitivamente hay un problema con la forma en que se debe configurar el bean messageSource para que recoja el paquete de recursos de destino.

1) Si el bean messageSource es de tipo ReloadableResourceBundleMessageSource no funcionará:

import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.support.ReloadableResourceBundleMessageSource;

@Configuration
@ComponentScan(basePackages =  "com.intertech.service" )
//@ImportResource("classpath:spring/applicationContext-i18n.xml")
public class AppConfig 

  @Bean(name = "messageSource")
  public ReloadableResourceBundleMessageSource getMessageSource() 
      ReloadableResourceBundleMessageSource messageSource = new ReloadableResourceBundleMessageSource();
      messageSource.setBasename("config/messages");
      messageSource.setDefaultEncoding("UTF-8");
      messageSource.setUseCodeAsDefaultMessage(true);
      return messageSource;
  

//  @Bean(name = "messageSource")
//  public ResourceBundleMessageSource getMessageSource() 
//      ResourceBundleMessageSource messageSource = new ResourceBundleMessageSource();
//      messageSource.setBasename("config/messages");
//      messageSource.setDefaultEncoding("UTF-8");
//      messageSource.setUseCodeAsDefaultMessage(true);
//      return messageSource;
//  

2) Si el bean messageSource es de tipo ResourceBundleMessageSource funcionará:

import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.support.ResourceBundleMessageSource;

@Configuration
@ComponentScan(basePackages =  "com.intertech.service" )
//@ImportResource("classpath:spring/applicationContext-i18n.xml")
public class AppConfig 

//  @Bean(name = "messageSource")
//  public ReloadableResourceBundleMessageSource getMessageSource() 
//      ReloadableResourceBundleMessageSource messageSource = new ReloadableResourceBundleMessageSource();
//      messageSource.setBasename("config/messages");
//      messageSource.setDefaultEncoding("UTF-8");
//      messageSource.setUseCodeAsDefaultMessage(true);
//      return messageSource;
//  

  @Bean(name = "messageSource")
  public ResourceBundleMessageSource getMessageSource() 
      ResourceBundleMessageSource messageSource = new ResourceBundleMessageSource();
      messageSource.setBasename("config/messages");
      messageSource.setDefaultEncoding("UTF-8");
      messageSource.setUseCodeAsDefaultMessage(true);
      return messageSource;
  

3) Si está utilizando un archivo de configuración XML combinado con una clase de configuración, funcionará (observe cómo el paquete base está configurado en una clase como una forma de calificación, es decir, ‘config.messages’ no ‘config / messages’): (applicationContext -i18n.xml)




    

    
    

y:

import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.ImportResource;

@Configuration
@ComponentScan(basePackages =  "com.intertech.service" )
@ImportResource("classpath:spring/applicationContext-i18n.xml")
public class AppConfig 

//  @Bean(name = "messageSource")
//  public ReloadableResourceBundleMessageSource getMessageSource() 
//      ReloadableResourceBundleMessageSource messageSource = new ReloadableResourceBundleMessageSource();
//      messageSource.setBasename("config/messages");
//      messageSource.setDefaultEncoding("UTF-8");
//      messageSource.setUseCodeAsDefaultMessage(true);
//      return messageSource;
//  

//  @Bean(name = "messageSource")
//  public ResourceBundleMessageSource getMessageSource() 
//      ResourceBundleMessageSource messageSource = new ResourceBundleMessageSource();
//      messageSource.setBasename("config/messages");
//      messageSource.setDefaultEncoding("UTF-8");
//      messageSource.setUseCodeAsDefaultMessage(true);
//      return messageSource;
//  

4) Lo más importante … si está utilizando un WebApplicationInitializer (no web.xml), debe registrar la clase de configuración que define el bean ‘messageSource’ en el contexto raíz, no en el contexto del servlet del despachador:

import javax.servlet.ServletContext;
import javax.servlet.ServletException;
import javax.servlet.ServletRegistration;

import org.springframework.web.WebApplicationInitializer;
import org.springframework.web.context.ContextLoaderListener;
import org.springframework.web.context.support.AnnotationConfigWebApplicationContext;
import org.springframework.web.servlet.DispatcherServlet;

public class WebAppInitializer implements WebApplicationInitializer 

    @Override
    public void onStartup(ServletContext container) throws ServletException 
    // Create the 'root' Spring application context
    AnnotationConfigWebApplicationContext rootContext = new AnnotationConfigWebApplicationContext();
    rootContext.register(AppConfig.class);
    // Manage the lifecycle of the root application context
    container.addListener(new ContextLoaderListener(rootContext));
    // Create the dispatcher servlet's Spring application context
    AnnotationConfigWebApplicationContext dispatcherServlet = new AnnotationConfigWebApplicationContext();
    dispatcherServlet.register(MvcConfig.class);
    // Register and map the dispatcher servlet
    ServletRegistration.Dynamic dispatcher = container.addServlet("dispatcher", new DispatcherServlet(
            dispatcherServlet));
    dispatcher.setLoadOnStartup(1);
    dispatcher.addMapping("*.htm");
    

Sección de Reseñas y Valoraciones

Si haces scroll puedes encontrar las crónicas de otros programadores, tú asimismo eres capaz mostrar el tuyo si lo deseas.

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)


Tags :

Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *