2012-04-06 10 views
6

Nuevo en Spring-MVC.Acceso a las propiedades de la aplicación en Spring-MVC

Quiero almacenar dos propiedades (uploadFolder = .., downloadFolder = ..) en un archivo .properties y acceder a ella en la clase HomeController (creada automáticamente por la plantilla MVC).

¿Puede usted por favor me guía de cómo ..

1) Creado presentar una app.properties con lo anterior y lo colocó debajo/src/main/resources. ¿Es correcto o debería pasar por/webapp/resources?

2) Coloca un bean en servlet-context.xml de la siguiente manera. ¿es esto correcto?

<beans:bean id="messageSource" 
    class="org.springframework.context.support.ResourceBundleMessageSource"> 
    <beans:property name="basename" value="app" /> 
</beans:bean> 

3) Ahora, ¿cómo puedo acceder a esto en los controladores de Java?

4) ¿Cómo accedo a estos en un JSP?

No sé cuánto agradeceré.

Respuesta

20

Hay algunas maneras diferentes de hacerlo. Yo hago lo siguiente. En el contexto de aplicación:

<util:properties id="myProps" location="classpath:app.properties" /> 

Asegúrese de tener lo siguiente en la parte superior de su archivo para incluir el "util" espacio de nombres:

xmlns:util="http://www.springframework.org/schema/util" 
xsi:schemaLocation= "... http://www.springframework.org/schema/util http://www.springframework.org/schema/util/spring-util-3.0.xsd" 

Yo suelo poner mis archivos de propiedades en src/main/resources . Mientras estén en la ruta de clases, eres bueno. Luego, en su controlador, puede anotar su campo/método con:

@Controller 
public class MyController { 

    @Value("#{myProps['uploadFolder']}") 
    private String uploadFolder 

    @Value("#{myProps['downloadFolder']}") 
    private String downloadFolder 

    @RequestMapping("myPage") 
    public String loadPage(ModelMap m) { 
     m.addAttribute("uploadFolder", uploadFolder); 
     m.addAttribute("downloadFolder", downloadFolder); 
     return "myPage"; 
    } 

    public void setUploadFolder(String uploadFolder) { 
     this.uploadFolder = uploadFolder; 
    } 
    public void setDownloadFolder(String downloadFolder) { 
     this.downloadFolder = downloadFolder; 
    } 
} 

entonces, en su JSP:

Download folder: ${downloadFolder} <br/> 
Upload folder: ${uploadFolder} 

HTH. Hazme saber si tienes alguna pregunta.

+0

¿Te preguntas cómo conseguir esa propiedad en clase de servicio? – Tom

+0

¿Puedes hacerlo de esta manera replanteando la ubicación del archivo de propenedas para una ubicación externa? –

0

1) Una mejor manera es mediante el uso de src/main/resources

2) sí, pero esto messages tienen diferentes efectos

3)

Una forma de hacer que un grano de archivo de propiedades en src/main/resources:

<bean id="foldersConfig" class="org.springframework.beans.factory.config.PropertiesFactoryBean"> 
    <property name="location" > 
     <value>/WEB-INF/classes/folders.properties</value> 
    </property> 
</bean> 

Y en su controlador simplemente inyecte la referencia.

aquí cómo el controlador se verá así, el xml:

<bean id="myController" class="my.project.package.controller.MyController"> 
... 
<property name="foldersConfig" ref="foldersConfig" /> 
</bean> 

La clase del controlador, parte relacionada:

public class MyController extends ... { 

private Properties foldersConfig; 

public void setFoldersConfig(Properties config) { 
    this.foldersConfig = config; 
} 
} 

4) Se puede acceder si se pone las propiedades en la vista - Modelo, pero esta no es una buena solución. Toma lo que necesites en el controlador (las rutas) y ponlo en el resultado.

+0

Debo inferir que el archivo debe estar en src/main/resources, debe llamarse folder.properties y la especificación de bean anterior debe estar en servlet-context.xml. ¿Puede mostrar cómo inyectar la referencia? Esa es la parte crítica que me faltaba incluso antes de hacer esta publicación. –

+0

@ srini.venigalla compruebe la respuesta que se actualiza –

Cuestiones relacionadas