2012-04-06 21 views
6

Nuovo in Spring-MVC.Accesso alle proprietà dell'applicazione in Spring-MVC

Desidero memorizzare due proprietà (uploadFolder = .., downloadFolder = ..) in un file .properties e accedervi nella classe HomeController (creata automaticamente dal modello MVC).

Potete per favore mi guida come ..

1) Creato un file delle app.properties con quanto sopra e pose sotto/src/main/resources. è corretto o dovrebbe andare in/webapp/resources?

2) Posizionato un bean in servlet-context.xml nel modo seguente. è corretto?

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

3) Ora come accedere a questo nei controller Java?

4) Come accedere a questi in un JSP?

Non so dire quanto ti ringrazierò.

risposta

20

Ci sono diversi modi per farlo. Io faccio quanto segue Nel contesto app:

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

Assicurarsi di aver il seguente nella parte superiore del file per includere il namespace "util":

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" 

Io di solito mettere i miei file di proprietà in src/main/risorse . Finché sono sul classpath, tu sei bravo. Poi, nel controller, è possibile annotare il vostro campo/metodo 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; 
    } 
} 

Poi, nel vostro JSP:

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

HTH. Fatemi sapere se avete domande.

+0

Ti chiedi come ottenere quella proprietà nella classe di servizio? – Tom

+0

puoi farlo in questo modo sostituendo la posizione del file delle proprietà per una localizzazione esterna? –

0

1) Modo migliore è quello di utilizzare src/main/resources

2) sì, ma questo messages hanno scopo diverso

3)

Un modo per rendere un fagiolo da file di proprietà in 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> 

E nel controller semplicemente iniettare il riferimento.

Ecco come il controller sarà simile, il xml:

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

La classe di controllo, parte correlata:

public class MyController extends ... { 

private Properties foldersConfig; 

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

4) Si può accedere se si mette le proprietà nella vista - Modello, ma questa non è una buona soluzione. Prendi ciò che ti serve nel controller (i percorsi) e inseriscilo nel risultato.

+0

Suppongo che il file debba essere in src/main/resources, dovrebbe essere chiamato folder.properties e la specifica del bean sopra dovrebbe essere in servlet-context.xml. Puoi per favore mostrare come iniettare il riferimento? Questa è la parte critica che mi mancava ancora prima di fare questo post. –

+0

@ srini.venigalla controlla la risposta è aggiornato –

Problemi correlati