2009-10-20 6 views
5

Estoy desarrollando un proyecto con Struts y me preguntaba si es posible obtener el objeto de recursos de mensaje en un servlet, que se incluye en el mismo proyecto.¿Cómo puedo obtener el objeto de recursos de mensaje en un servlet?

No hay posibilidad de obtener ese objeto con el método getResources(HTTPServletRequest) porque el servlet no amplía una clase de Acción. ¿Hay una manera de hacerlo?

Gracias de antemano.

Respuesta

6

Bueno, finalmente encontré cómo hacerlo. Solo si alguien se queda atrapado en el mismo problema, aquí está la solución: use la clase java.util.ResourceBundle en su servlet.

Sólo tienes que crear el ResourceBundle que pasa a lo largo del nombre de la clase propiedades y la configuración regional que desea utilizar, como se puede ver a continuación:

ResourceBundle rb = new ResourceBundle("com.foo.package.theClass", myLocale); 
//And then get the messages from the rb object 
rb.getMessage("myPropertiesKey"); 
+3

ResourceBundle es abstracto (al menos en Java 6). Necesitas llamar a ResourceBundle.getBundle ("com.foo.package.theClass", myLocale) en lugar de crear una instancia de la clase. –

+0

Tienes toda la razón, Jeremy. ¡Tiene que hacerse de esa manera, gracias por señalar eso! –

+0

No hay un método 'getMessage()' en la clase 'java.util.ResourceBundle', pero' getString() 'existe. Muchas gracias por un buen consejo, realmente funciona. –

-1

MessageResources-object se almacena en el ámbito de solicitud con la clave Globals.MESSAGES_KEY ("org.apache.struts.action.MESSAGE").

PropertyMessageResources p = (PropertyMessageResources) request.getAttribute(Globals.MESSAGES_KEY); 
String messageValue = null; 
if (p != null) { 
    // Value for key errors.notempty 
    messageValue = p.getMessage("errors.notempty")); 
} 
+0

Gracias por su ayuda, pero no puedo hacer que funcione. request.getAttribute (Globals.MESSAGES_KEY); devuelve nulo. Olvidé decir algo más de información al respecto. Estoy haciendo uso de los puntales de la biblioteca 1.3.10 y el servlet se define en el web.xml como se puede ver a continuación: \t \t \t \t \t PvsInterface \t PvsInterface com.ford.ads.rapid.pvsw.pvs.PvsInterface \t < carga al inicio> 1 ¿Me estoy perdiendo algo más? Gracias de antemano –

+0

¿cómo configuras tus recursos de mensajes? ¿Su struts-config.xml contiene algo como esto: Y si lo hace, ¿su archivo de propiedades de recursos de mensaje está en su classpath? –

+0

Gracias por responder. Sí, tengo los recursos del mensaje configurados en el archivo struts-config.xml. Y los archivos de recursos están donde está el código, en un paquete llamado recursos. –

0

También puede hacer algo como esto:

ActionContext.getContext().getActionInvocation().getAction() //the action context is threadlocal 

Una vez que tenga la acción, puede usar la interfaz TextProvider para obtener el recurso que necesita para esa acción.

Cuestiones relacionadas