2011-09-22 28 views
19

Tôi đã gặp một số sự cố với các tệp XHTML tải lại nóng bằng JRebel, Spring, JSF Mojarra 2.0.3 và WebLogic 10.3.JSF và tải lại tự động các tệp xhtml

JRebel tải lại các lớp Java thông thường và các tệp js/css trong/WebContent thành công, chứ không phải tệp .xhtml của JSF. Một tái xuất bản đầy đủ là cần thiết để có được các tập tin xhtml được cập nhật trên máy chủ.

Bằng thử nghiệm và lỗi Cuối cùng tôi đã làm cho nó hoạt động bằng cách thêm một số tham số facelets vào web.xml và tạo một ResourceResolver tùy chỉnh như được mô tả in this blog post.

Tuy nhiên, tôi tự hỏi tại sao các công trình này, và đặc biệt hơn:

  • Tại sao một ResourceResolver tùy chỉnh cần thiết?
  • JRebel không phải xử lý việc này bằng cách theo dõi/WebContent nơi tệp xhtml nằm ở đâu?
  • Tôi đoán nó có liên quan gì đó với Facelets/JSF biên dịch xhtml thành servlet (?) Thông qua FacesServlet mà JRebel không thể phát hiện được?

Trả lời

37

Thay đổi thư mục JRebel/WebThay đổi thư mục.

Sự cố là Facelets lưu vào bộ nhớ đệm và không đọc lại các tệp đã thay đổi. Để bắt buộc đọc lại, hãy chỉ định các tham số sau trong web.xml.

JSF 2 (Facelets 2.x):

<!-- Time in seconds that facelets should be checked for changes since last request. A value of -1 disables refresh checking. --> 
<context-param> 
    <param-name>javax.faces.FACELETS_REFRESH_PERIOD</param-name> 
    <param-value>0</param-value> 
</context-param> 

<!-- Set the project stage to "Development", "UnitTest", "SystemTest", or "Production". --> 
<!-- An optional parameter that makes troubleshooting errors much easier. --> 
<!-- You should remove this context parameter before deploying to production! --> 
<context-param> 
    <param-name>javax.faces.PROJECT_STAGE</param-name> 
    <param-value>Development</param-value> 
</context-param> 

Đối JSF 1.2 (Facelets 1.x) các thông số như sau:

<context-param> 
    <param-name>facelets.REFRESH_PERIOD</param-name> 
    <param-value>0</param-value> 
</context-param> 
<context-param> 
    <param-name>facelets.DEVELOPMENT</param-name> 
    <param-value>true</param-value> 
</context-param> 

Thông tin thêm về bối cảnh JSF thông số: http://docs.jboss.org/jbossas/6/JSF_Guide/en-US/html/jsf.reference.html#standard.config.params

Trình phân giải tài nguyên tùy chỉnh đó là không cần thiết trong trường hợp của bạn. Đó là giải quyết tài nguyên chỉ là một cách khôn lanh để có được các tập tin xhtml từ thư mục hệ thống tập tin tùy chỉnh. Trong trường hợp của bạn, JRebel thực hiện điều đó (và thậm chí nhiều hơn).

+0

Tôi tin rằng JRebel đã hoàn toàn làm điều đó. Ít nhất, ở đây nó. Lưu ý rằng các tham số ngữ cảnh của bạn là Facelets 1.x cụ thể và OP đó sử dụng Facelets 2.x. – BalusC

+0

@Balusc Cảm ơn bạn đã trả lời, câu trả lời được cập nhật thành Facelets 2.x cụ thể. – Andrey

+0

Đặt 'javax.faces.FACELETS_REFRESH_PERIOD' thành' 0' và 'javax.faces.PROJECT_STAGE' thành' Development' dường như không kích hoạt các mẫu được cập nhật với JRebel trên JSF 2.0.4 và WebLogic 10.3. – uggedal

1

Đây là cách tôi cố định này cho tôi:

  1. Xác minh rằng facelets plugin được bật trong cài đặt JRebel bạn &
  2. Xác minh rằng bạn đang sử dụng Project StageDevelopment trong bạn web.xml
Các vấn đề liên quan