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)?

¿Fue útil?

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


    }

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top