2011-08-28 21 views
7

Tôi đang sử dụng chú thích @ResourceDependency trong thành phần JSF để thêm tệp Javascript và CSS vào trang JSF của tôi.Lấy EL trong một tệp Javascript, được tải bởi @ResourceDependency

Trong tệp Javascript của mình, tôi cần tham khảo tệp tài nguyên khác (tệp .swf, nằm trong META-INF/resources, như JSF yêu cầu). Tôi đã cố gắng để đặt một biểu thức EL #{resource['swf:file.swf']} trong mã javascript của tôi, nhưng nó sẽ không được giải quyết.

Đối exapmle, cho các tập tin JS sau trong server:

var instance = new JSClass(); 
instance.setResourceUrl("#{resource['swf:file.swf']}"); 

Trình duyệt được:

var instance = new JSClass(); 
instance.setResourceUrl("#{resource['swf:file.swf']}"); 

đó là sai.

Trong khi tôi đặt cùng một EL vào tệp CSS, nó được giải quyết đúng cách. Đối với các tập tin CSS sau trong server:

.instance-css-class { 
    background: url("#{resource['swf:file.swf']}") 
} 

Trình duyệt được:

.instance-css-class { 
    background: url("/webapp/javax.faces.resource/file.swf.jsf?ln=swf") 
} 

Đó là chính xác những gì tôi cần, nhưng trong file JS. Rõ ràng, tôi có thể sử dụng CSS như một giải pháp cho vấn đề này (Tạo một phần tử DOM, đính kèm lớp CSS vào nó, sau đó đọc và phân tích thuộc tính kiểu dáng yêu cầu). Nhưng, có một cách thanh lịch hơn để đạt được nó? Có phải nó là một lỗi trong thư viện JSF (tôi đang sử dụng Mojarra 2.0.3, với Jboss 6.1), hoặc có một lý do cho hành vi đó?

Hãy nhớ rằng mã ở trên là một phần của thư viện thẻ nên không thể sử dụng các cách giải quyết như those.


Sửa - Có vẻ như là workaround CSS là không khả thi, vì tôi không thể nhìn thấy một cách để có được thuộc tính CSS từ một file CSS. Vì vậy, bất kỳ workaround (làm việc) sẽ được sẵn sàng chấp nhận là tốt.

+0

Tôi vừa mới phát hiện ra điều ngạc nhiên của tôi là EL được đánh giá bằng CSS. Việc triển khai Mojarra sử dụng ResourceHelper có khả năng giải quyết EL Expressions trong các tài nguyên được yêu cầu bởi một yêu cầu tài nguyên Faces. Đó là lý do tại sao tôi tự hỏi rằng EL không được đánh giá trong các tệp JS vì nó là cùng một loại yêu cầu. Sẽ là tuyệt vời nếu bất cứ ai có thể làm sáng tỏ điều này. – tasel

Trả lời

0

BalusC đã trả lời câu hỏi tương tự chi tiết here. Mặc dù giải pháp đầu tiên là dễ nhất để thực hiện, tôi khuyên bạn nên đi với thứ ba, theo ý kiến ​​của tôi, là cách chính xác.

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