2013-06-10 36 views
11

Tôi rất mới vào ứng dụng dựa trên chú thích mvc 3 mùa xuân. Tôi có hai tệp thuộc tính - WEB-INF \ resources \ general.properties, WEB-INF \ resources \ jdbc_config.propertiesCách lấy các thuộc tính trong các tệp JSP bằng cách sử dụng spring mvc 3

Bây giờ tôi muốn định cấu hình chúng thông qua spring-servlet.xml. Làm thế nào tôi có thể đạt được điều này?

Trong general.properties,

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

... vv 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 

--- vv

Nếu tôi muốn nhận được label.username và ứng dụng .jdbc.driverClassName trong trang jsp của tôi, làm cách nào để mã cho chúng?

Tôi cũng muốn truy cập các giá trị thuộc tính này từ dịch vụ của mình. Làm cách nào để có được các giá trị thuộc tính này bằng cách sử dụng các khóa tương ứng ở cấp phương thức trong lớp dịch vụ hoặc lớp điều khiển?

+0

trùng lặp có thể xảy ra của [Làm thế nào để hiển thị các giá trị từ tập tin bất động sản trong JSP trong một mùa xuân ứng dụng MVC] (http://stackoverflow.com/questions/15111260/how-to-show-values-from-property-file-in-jsp-in-a-spring-mvc-app) – Vadzim

Trả lời

12

Tôi cho rằng tệp spring-servlet.xml của bạn là một trong các tệp ngữ cảnh ứng dụng của bạn. Nếu đó là trường hợp thêm vào đó thì đậu sau:

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

thì đây là cách bạn có thể nhận được giá trị tài sản trong JSP (đừng quên để thêm taglib mùa xuân ở phía trên cùng của JSP của bạn):

<%@ 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

Tôi cũng muốn nhận các giá trị thuộc tính này trong Dịch vụ của tôi. Làm cách nào để truy cập chúng từ các phương thức khác nhau được tạo thành dịch vụ ?? – user2432330

+4

Downvoting như câu trả lời này có thực hành rất rất xấu mà không có bất kỳ cảnh báo ... Tại sao tải thuộc tính ứng dụng như tin nhắn? Rõ ràng câu hỏi xứng đáng có câu trả lời sâu sắc hơn về các nguồn thuộc tính, các trình cấu hình trình giữ chỗ và sự khác biệt giữa các thuộc tính ứng dụng và các bó tài nguyên thư. –

+0

@PavelHoral Bạn nói rằng đó là thực hành xấu nhưng bạn không giải thích tại sao. Bạn nói câu hỏi xứng đáng là một câu trả lời sâu sắc hơn, nhưng bạn không trình bày một câu trả lời. Hãy khai sáng với kiến ​​thức của bạn! –

15

Bạn cần phân biệt giữa các thuộc tính ứng dụng (cấu hình) và thông báo bản địa hóa. Cả hai đều sử dụng các tệp thuộc tính JAVA, nhưng chúng phục vụ cho mục đích khác nhau và được xử lý khác nhau.

Lưu ý: Tôi đang sử dụng cấu hình Spring dựa trên Java trong các ví dụ bên dưới. Cấu hình cũng có thể dễ dàng thực hiện trong XML. Chỉ cần kiểm tra Spring JavaDocreference documentation.


Thuộc tính ứng dụng

tính ứng dụng nên được nạp như nguồn tài sản trong bối cảnh ứng dụng của bạn. Điều này có thể được thực hiện thông qua @PropertySource chú thích trên @Configuration lớp học của bạn:

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

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

} 

Sau đó, bạn có thể tiêm các thuộc tính sử dụng @Value chú thích:

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

Tin nhắn Localization

điệp Localization là một một câu chuyện khác. Thư được tải dưới dạng resource bundles và quy trình giải quyết đặc biệt được áp dụng để nhận được thông báo dịch chính xác cho một số locale được chỉ định.

Vào mùa xuân, các thư này được xử lý bởi MessageSources. Bạn có thể định nghĩa của riêng bạn ví dụ qua ReloadableResourceBundleMessageSource:

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

Bạn có thể truy cập vào các thông điệp từ đậu nếu bạn để cho mùa xuân tiêm MessageSource:

@Autowired 
private MessageSource messageSource; 

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

Và bạn có thể dịch các tin nhắn trong JSP của bạn bằng cách sử dụng <spring:message> tag :

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

cảm ơn vì đã thông báo cho tôi về sự khác biệt. giữa các thuộc tính ứng dụng (cấu hình) và các thông điệp bản địa hóa ... hãy cập nhật cách truy cập ** giá trị ** từ các thuộc tính ứng dụng ** ** trong jsp, –

4

Tôi đã sử dụng Môi trường

Thêm những dòng này để cấu hình

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

Bạn có thể nhận được các tính chất từ ​​bộ điều khiển sử dụng Môi trường autowired

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"; 
    } 
} 
Các vấn đề liên quan