2010-11-08 56 views
7

Có thể sử dụng jstl bên trong javascript không?jstl bên trong javascript

Tôi buộc phải thiết lập <c:set var="abc" value="yes"/>

và sau đó truy cập giá trị này trong html và thực hiện một số mã. Vấn đề của tôi là c: set được thực hiện luôn ngay cả khi điều kiện javascript là false.

<script type="text/javascript"> 
var v1 = false; 
<c:set var"abc" value="yes"/> 

if(v1){ 
    <c:set var"abc" value="no"/> 
} 
</script> 

Trong mã trên, ngay cả khi v1 là sai 'không' được đặt thành abc.

+2

Đọc điều này: http://balusc.blogspot.com/2009/05/javajspjsf-and-javascript.html Đến thời điểm này: Java/JSP/JSTL/EL chạy trên máy chủ web và tạo HTML/CSS/JS. Webserver gửi HTML/CSS/JS tới webbrowser. Webbrowser truy xuất HTML/CSS/JS và thực thi nó. Nếu Java đã hoàn thành nhiệm vụ của mình, trình duyệt web không nên lấy bất kỳ dòng mã Java/JSP/JSTL/EL nào. Đơn giản là vì nó không hiểu nó. – BalusC

+0

đó là một blog hay ... – coder247

Trả lời

18

Không có ý nghĩa gì đối với ý tưởng là "bên trong Javascript" khi bạn đang nói về cách giải thích JSP phía máy chủ. Không chỉ có điều như Javascript như xa như tên miền đó là có liên quan.

Do đó, vâng, đó là có thể, nếu bạn có nghĩa là bạn muốn làm một cái gì đó giống như

var something = '${abc}'; 

Lưu ý rằng bạn phải cẩn thận với trích dẫn và ký tự đặc biệt. Hàm JSTL fn:escapeXml() là vô dụng khi bạn đang nội suy biến JSP thành một phần của trang sẽ được trình duyệt hiểu là nguồn Javascript. Bạn có thể sử dụng một thư viện JSON để mã hóa các chuỗi của bạn, hoặc bạn có thể viết hàm EL của riêng bạn để thực hiện nó.

4

Đây là một chủ đề khá cũ, nhưng đó là một chuỗi tôi gặp phải khi tôi gặp sự cố tương tự. Kể từ khi tôi nghĩ về một giải pháp bản thân mình, tôi sẽ đăng nó ở đây trong trường hợp nó giúp ai đó trong tương lai.

Tệp html (hoặc jsp) tìm văn bản bên trong tệp bên ngoài được khai báo dưới dạng nguồn javascript.

Tomcat (hoặc tương tự) chỉ diễn giải các thẻ JSTL trong các tệp có phần mở rộng .jsp (hoặc có thể một số tiện ích mở rộng khác nữa, nhưng không liên quan đến câu trả lời này).

Vì vậy, đổi tên tập tin .js của bạn để cung cấp cho nó một phần mở rộng .jsp (javascript.js để javascript_js.jsp ví dụ)

Thêm những dòng ở trên cùng của javascript_js.jsp:

<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> 
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%> 

và chỉ để mã không thay đổi.

Rõ ràng, bạn cũng cần thêm các tiền tố khác nếu bạn sử dụng một số tiền tố khác với c: trong tiêu đề.

Nếu bạn sử dụng Eclipse (không biết về các IDE khác), nó sẽ giả định nó không phải là tệp javascript và bạn mất bảng màu cho các từ khóa khác nhau (var, chức năng vv ..) và thụt lề tự động.

Để đánh lừa IDE, bạn có thể thêm

// <script> 

như một bình luận js, trước khi mã thực tế (sau khi tuyên bố "<% @"), và

// </script> 

ở cuối của tệp, một lần nữa dưới dạng nhận xét js.

Nó làm việc cho tôi.

3
<script> 
    <c:set var="myVal" value="Hello"/> 

    var val1="${myVal}"; 

</script>