2011-04-10 24 views
6

Tôi đang sử dụng Java Facelets và jQuery, tuy nhiên biểu hiện

$('...') 

trong cuộc xung đột với biểu EL jQuery, làm thế nào để thoát khỏi một của jQuery?

Tôi cũng muốn thoát khỏi một đoạn lớn của Javascript.

TRẢ LỜI

Để chuyển đổi các JSP hiện có để Facelets xhtml, nó thuận tiện để chỉ quấn javascript hiện có bằng cách <![CDATA[ ... ]]>. Tuy nhiên, kịch bản đầu ra cho <script> được bọc bởi <!-- --> bình luận, xung đột với phần CDATA:

<script><![CDATA[ scripts... ]]></script> 

=> <script><!-- <![CDATA[ scripts... ]]> --></script> 

Để giải quyết vấn đề này, bạn cũng nên chú vào CDATA:

<script>/* <![CDATA[ */ scripts... /* ]]> */</script> 

=> <script><!-- /* <![CDATA[ */ scripts... /* ]]> */--></script> 

Xem thêm When is a CDATA section necessary within a script tag?.

+0

Theo cập nhật của bạn, vấn đề thực sự nói rõ ràng: bạn đang viết JS mã thô trong một file XML và phân tích cú pháp XML đang giảm so với '$ 'mà nên được biểu thị dưới dạng '&'. Ngoài giải pháp 'CDATA' xấu, giải pháp tốt nhất là đặt mã JS vào tệp' .js' của chính nó. Sau khi tất cả, tiêu đề câu hỏi và cơ thể không mô tả vấn đề thực sự và do đó gây hiểu lầm. – BalusC

Trả lời

3

Điều này thường không xung đột. EL sử dụng cú pháp ${}. Dù sao, bạn có thể sử dụng jQuery() thay vì ($() chỉ là viết tắt) hoặc chỉ cần đặt mã JS vào tệp .js của riêng mình.

11

nên bất cứ ai cần đến, các Expression Language Specification Version 2.2 Maintenance Release mô tả làm thế nào để thoát khỏi EL biểu:

Để tạo các giá trị văn chương mà bao gồm các chuỗi ký tự "${" hoặc "#{", nhà phát triển có thể chọn để sử dụng một biểu thức tổng hợp như thể hiện đây:

${'${'}exprA} 
#{'#{'}exprB} 

các giá trị kết quả sau đó sẽ là chuỗi ${exprA}#{exprB}.

Ngoài ra, các nhân vật thoát \$\# có thể được sử dụng để thoát khỏi gì nếu không sẽ được đối xử như một eval thể hiện. Với đen-biểu:

\${exprA} 
\#{exprB}