2013-06-10 16 views
11

Spring mvc 3 ek açıklama tabanlı uygulama için çok yeni. Ben iki özellik dosyaları var - WEB-INF \ kaynakları \ general.properties, WEB-INF \ kaynaklar \ jdbc_config.properties Yay mvc 3 kullanarak JSP dosyalarındaki özellikleri nasıl alabilirim?

Şimdi bahar servlet.xml aracılığıyla yapılandırmak istiyorum. Bunu nasıl başarabilirim? general.properties ise

,

label.username = User Name: 
label.password = Password: 
label.address = Address: 

... vb jdbc_config.properties,

app.jdbc.driverClassName=com.mysql.jdbc.Driver 
app.jdbc.url=jdbc:mysql://localhost:[port_number]/ 
app.jdbc.username=root 
app.jdbc.password=pass 

--- vb

Ben label.username ve uygulamayı almak istiyorsanız

.jdbc.driverClassName, jsp sayfamda bunları nasıl kodlarım?

Ayrıca bu özellik değerlerine hizmetimden erişmek istiyorum. Hizmet sınıfı veya denetleyici sınıfındaki yöntem düzeyinde ilgili anahtarları kullanarak bu özellik değerlerini nasıl alabilirim?

+0

Olası kopyalar ([yay MVC uygulamasında JSP mülkiyet dosyadan değerleri göstermek için nasıl] http://stackoverflow.com/questions/15111260/how-to-show-values-from-property-file-in-jsp-in-a-spring-mvc-app) – Vadzim

cevap

12

Dosyanızda bulunan spring-servlet.xml dosyasının, uygulama bağlam dosyalarınızdan biri olduğunu kabul ediyorum. Eğer durum içine aşağıdaki fasulye ekleyin ise:

<bean id="messageSource" class="org.springframework.context.support.ReloadableResourceBundleMessageSource"> 
    <property name="basenames"> 
     <list> 
      <value>WEB-INF/resources/general</value> 
      <value>WEB-INF/resources/jdbc_config</value> 
     </list> 
    </property> 
</bean> 

o zaman bu size JSP (JSP üstündeki yay taglib eklemeyi unutmayın) içinde özellik değerini nasıl alabilirim geçerli:

<%@ taglib prefix="spring" uri="http://www.springframework.org/tags"%> 
<table> 
    <tr> 
     <td>User Name:</td> 
     <td><spring:message code="label.username" />:</td> 
    </tr> 
    <tr> 
     <td>Driver Class Name:</td> 
     <td><spring:message code="app.jdbc.driverClassName" />:</td> 
    </tr> 
etc... 
</table> 
+0

Ayrıca bu özellik değerlerini de almak istiyorum Hizmetim Hizmete oluşturulan farklı yöntemlerden nasıl erişilir? – user2432330

+4

Bu yanıtın düşürülmesi, herhangi bir uyarıda bulunmadan çok kötü uygulamalar içeriyor ... Uygulama özelliklerini neden mesaj olarak gönderiyorsunuz? Açıkçası soru, mülk kaynakları, yer tutucu yapılandırıcılar ve uygulama özellikleri ile mesaj kaynağı grupları arasındaki fark hakkında daha derin bir cevabı hak ediyor. –

+0

@PavelHoral Kötü bir uygulama olduğunu söylüyorsunuz ama nedenini açıklamıyorsunuz. Sorunun daha derin bir cevabı hak ettiğini söylüyorsunuz, ama siz bir tane sunmuyorsunuz. Lütfen bilginizle aydınlatın! –

15

Uygulama özellikleri (yapılandırma) ve yerelleştirme iletileri arasında ayrım yapmanız gerekir. Her ikisi de JAVA özellik dosyalarını kullanır, ancak farklı amaçlara hizmet eder ve farklı şekilde ele alınırlar.

Not: Örneklerde, Java tabanlı Yay yapılandırması kullanıyorum. Yapılandırma XML'de de kolayca yapılabilir. Sadece Spring'in JavaDoc ve reference documentation numaralarını kontrol edin.


Uygulama Özellikleri

Uygulama özellikleri mülkiyet kaynaklarının uygulamanız kapsamında olarak yüklenmelidir.

@Configuration 
@PropertySource("classpath:default-config.properties") 
public class MyConfig { 

    @Bean 
    public static PropertySourcesPlaceholderConfigurer propertyPlaceholderConfigurer() { 
     return new PropertySourcesPlaceholderConfigurer(); 
    } 

} 

Sonra enjekte edebilir özellikleri @Value ek açıklama kullanarak: Bu @Configuration sınıfına @PropertySource açıklama yoluyla yapılabilir

@Value("${my.config.property}") 
private String myProperty; 

Yerelleştirme Mesajları

Yerelleştirme mesajlar olduğunu biraz farklı hikaye. İletiler resource bundles olarak yüklenir ve belirtilen bir locale için doğru çeviri iletisini almak için özel bir çözüm işlemi uygulanır.

İlkbaharda, bu iletiler MessageSources tarafından işlenir. Bahar MessageSource enjekte izin verirsen

@Bean 
public MessageSource messageSource() { 
    ReloadableResourceBundleMessageSource messageSource = new ReloadableResourceBundleMessageSource(); 
    messageSource.setBasename("/WEB-INF/messages/messages"); 
    return messageSource; 
} 

Fasulyeden bu iletileri erişebilirsiniz: Sen ReloadableResourceBundleMessageSource aracılığıyla örneğin kendi tanımlayabilirsiniz

@Autowired 
private MessageSource messageSource; 

public void myMethod() { 
    messageSource.getMessage("my.translation.code", null, LocaleContextHolder.getLocale()); 
} 

Ve <spring:message> etiketi kullanarak JSP'lerde mesajları çevirebilir :

<spring:message code="my.translation.code" /> 
+0

Farkı bildirdiğiniz için teşekkürler. uygulama özellikleri (yapılandırma) ve yerelleştirme mesajları arasında ... jsp olarak ** uygulama özelliklerinden ** ** değerine nasıl erişileceğini lütfen güncelleyin. –

4

Ben Çevre

kullanarak sona erdi

Sen autowired ortamı kullanarak denetleyicisinden özelliklerini alabilirsiniz

@PropertySource("classpath:/configs/env.properties") 
public class WebConfig extends WebMvcConfigurerAdapter{...} 

yapılandırma için şu satırları ekleyin

public class BaseController { 
    protected final Logger LOG = LoggerFactory.getLogger(this.getClass()); 

    @Autowired 
    public Environment env; 

    @RequestMapping("/") 
    public String rootPage(ModelAndView modelAndView, HttpServletRequest request, HttpServletResponse response) { 
     LOG.debug(env.getProperty("download.path")); 
     return "main"; 
    } 
} 
ait
İlgili konular