2009-10-20 31 views
5

Tôi đang phát triển một dự án với Struts và tôi đã tự hỏi liệu có thể lấy đối tượng tài nguyên thư trong một servlet, được bao gồm trong cùng một dự án hay không.Làm cách nào để lấy đối tượng tài nguyên thư trong một servlet?

Không có khả năng nhận đối tượng đó với phương thức getResources(HTTPServletRequest) vì servlet không mở rộng lớp Hành động. Có cách nào để làm điều đó?

Xin cảm ơn trước.

Trả lời

6

Vâng, cuối cùng tôi đã tìm được cách thực hiện. Chỉ khi ai đó bị kẹt trong cùng một vấn đề, đây là giải pháp: sử dụng lớp java.util.ResourceBundle trong servlet của bạn.

Bạn chỉ cần có để tạo ra các ResourceBundle đi dọc theo tên của lớp tài sản và các địa mà bạn muốn sử dụng, như bạn có thể xem dưới đây:

ResourceBundle rb = new ResourceBundle("com.foo.package.theClass", myLocale); 
//And then get the messages from the rb object 
rb.getMessage("myPropertiesKey"); 
+3

ResourceBundle là trừu tượng (ít nhất là trong Java 6). Bạn cần gọi ResourceBundle.getBundle ("com.foo.package.theClass", myLocale) thay vì instantiating lớp. –

+0

Bạn hoàn toàn đúng, Jeremy. Nó phải được thực hiện theo cách đó, cảm ơn vì đã chỉ ra điều đó !! –

+0

Không có phương thức 'getMessage()' trong lớp 'java.util.ResourceBundle', nhưng' getString() 'có. Cảm ơn rất nhiều vì lời khuyên tốt, nó thực sự hiệu quả. –

-1

ThưResources-object được lưu trữ trong phạm vi yêu cầu với khóa Globals.MESSAGES_KEY ("org.apache.struts.action.MESSAGE").

PropertyMessageResources p = (PropertyMessageResources) request.getAttribute(Globals.MESSAGES_KEY); 
String messageValue = null; 
if (p != null) { 
    // Value for key errors.notempty 
    messageValue = p.getMessage("errors.notempty")); 
} 
+0

Cảm ơn sự giúp đỡ của bạn nhưng tôi không thể làm cho nó hoạt động. request.getAttribute (Globals.MESSAGES_KEY); trả về null. Tôi quên nói thêm một số thông tin về nó. Tôi đang làm cho việc sử dụng Struts thư viện 1.3.10 và servlet được định nghĩa trong web.xml như bạn có thể xem dưới đây: \t \t \t \t \t PvsInterface \t PvsInterface com.ford.ads.rapid.pvsw.pvs.PvsInterface \t < tải-trên-khởi động> 1 Tôi có thiếu cái gì khác không? Cảm ơn trước –

+0

cách bạn định cấu hình tài nguyên thư của mình? Tệp struts-config.xml của bạn có chứa thông tin như sau: Và nếu bạn làm thế, tệp thuộc tính tài nguyên thư của bạn có nằm trong classpath của bạn không? –

+0

Cảm ơn bạn đã trả lời. Có, tôi có tài nguyên thư được định cấu hình trong tệp struts-config.xml. Và các tệp tài nguyên là nơi mã, trong một gói được gọi là tài nguyên. –

0

Bạn cũng có thể làm điều gì đó như thế này:

ActionContext.getContext().getActionInvocation().getAction() //the action context is threadlocal 

Khi bạn có hành động, bạn có thể sử dụng giao diện TextProvider để nhận bất kỳ tài nguyên nào bạn cần cho hành động đó.

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