2012-04-06 46 views
6

Mới đối với Spring-MVC.Truy cập thuộc tính ứng dụng trong Spring-MVC

Tôi muốn lưu trữ hai thuộc tính (uploadFolder = .., downloadFolder = ..) trong tệp .properties và truy cập nó trong lớp HomeController (được tạo tự động bởi mẫu MVC).

bạn có thể vui lòng hướng dẫn cho tôi như thế nào ..

1) Tạo nộp app.properties với ở trên và đặt nó dưới/src/main/nguồn lực. điều này đúng hay nó nên đi theo/webapp/resources?

2) Đặt một bean trong servlet-context.xml theo cách sau. điều này có đúng không?

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

3) Bây giờ tôi làm cách nào để truy cập điều này trong bộ điều khiển Java?

4) Làm cách nào để truy cập chúng trong JSP?

Tôi không thể nói tôi sẽ cảm ơn bao nhiêu.

Trả lời

20

Có một vài cách khác nhau để thực hiện. Tôi làm như sau. Trong bối cảnh ứng dụng:

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

Hãy chắc chắn rằng bạn đã sau ở phía trên cùng của tập tin của bạn để bao gồm các "util" namespace:

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" 

Tôi thường đưa các tập tin tài sản của tôi trong src/main/nguồn lực . Miễn là họ đang trên đường dẫn lớp, bạn tốt. Sau đó, trong điều khiển của bạn, bạn có thể chú thích lĩnh vực/phương pháp của bạn với:

@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; 
    } 
} 

Sau đó, trong JSP của bạn:

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

HTH. Hãy cho tôi biết nếu bạn có bất kỳ câu hỏi.

+0

Tự hỏi làm cách nào để có được thuộc tính đó trong lớp dịch vụ? – Tom

+0

u có thể làm điều đó theo cách này thay thế vị trí của tập tin propeties cho một vị trí bên ngoài? –

0

1) Tốt hơn Cách thứ nhất là bằng cách sử dụng src/main/resources

2) vâng, nhưng messages này có mục đích khác nhau

3)

Một cách để làm cho một bean từ tập các thuộc tính trong 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> 

Và trong bộ điều khiển của bạn chỉ cần tiêm tham chiếu.

Dưới đây cách điều khiển của bạn sẽ như thế nào, xml:

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

Lớp điều khiển, phần liên quan:

public class MyController extends ... { 

private Properties foldersConfig; 

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

4) Bạn có thể truy cập nếu bạn đặt các thuộc tính trong View - Mô hình, nhưng giải pháp này không tốt. Lấy những gì bạn cần trong bộ điều khiển (đường dẫn) và đặt nó vào kết quả.

+0

Tôi đoán rằng tệp phải nằm dưới src/main/resources, nó phải được gọi là folder.properties và thông số bean ở trên phải ở trong servlet-context.xml. Bạn có thể vui lòng cho biết cách tiêm tham chiếu không? Đó là phần quan trọng mà tôi đã bỏ lỡ ngay cả trước khi thực hiện bài đăng này. –

+0

@ srini.venigalla kiểm tra câu trả lời được cập nhật –

Các vấn đề liên quan