¿Cómo puedo leer el contenido de la primavera MessageSource dentro de una enumeración?
-
24-09-2019 - |
Pregunta
Tengo una enumeración que contiene tres tipos diferentes de estado. Estos estados se deben mostrar en un correo electrónico enviado a los usuarios, y las cadenas que contienen los estados que se muestran son almacenados en messages.properties (leer usando una implementación de la clase org.springframework.context.MessageSource primavera). Esto funciona bien en un controlador de primavera normal. Sin embargo, yo preferiría para obtener el "estado" dentro de la enumeración (para contener la lógica en un solo lugar).
Sin embargo, auto-cablear el MessageSource a la enumeración como en el siguiente código no parece trabajo, ya que la propiedad MessageSource siempre está vacío.
public enum InitechStatus{
OPEN("open"), CLOSED("closed"), BROKEN("broken");
public final String name;
@Autowired
private MessageSource messageSource;
InitechStatus(String name) {
this.name = name;
}
@Override
public String toString() {
String displayStatusString = messageSource.getMessage("page.systemadministration.broadcastmail.status."
+ this.name, null, Locale.ENGLISH);
return displayStatusString;
}
}
¿Cómo puedo utilizar el MessageSource de auto-cableado dentro de la enumeración (o hay alguna otra manera de lograr lo que trato)?
Solución
He encontrado la solución a partir de esta respuesta en SO: Uso primavera COI para establecer los valores de enumeración
Esto me dio el puntero para utilizar java.util.ResourceBundle para leer los mensajes, así:
public enum InitechStatus{
OPEN("open"), CLOSED("closed"), BROKEN("broken");
private static ResourceBundle resourceBundle = ResourceBundle.getBundle("messages",
Locale.ENGLISH);
public final String name;
@Autowired
private MessageSource messageSource;
InitechStatus(String name) {
this.name = name;
}
@Override
public String toString() {
String displayStatusString = resourceBundle.getString("page.systemadministration.broadcastmail.status."
+ this.name);
return displayStatusString;
}
}