2012-04-21 68 views
5

Tôi mới phát triển web. Tôi có tệp JavaScript bên ngoài có chức năng hiển thị lời nhắc có chi tiết lỗi. Tôi cần truyền thông báo lỗi cho hàm. Tôi đã viết contoller trong servlet.Cách gọi hàm JavaScript từ servlet

Cách gọi hàm của tệp JavaScript đó từ servlet của tôi.

+0

Câu hỏi của bạn không có ý nghĩa. JavaScript được thực thi trong trình duyệt của người dùng. Một servlet được thực thi trên máy chủ. Suy nghĩ lại về những gì bạn thực sự muốn làm. –

+1

@JBNizet Tôi nghĩ chúng ta có thể gọi JS từ servlet. Chúng tôi có thể gửi phản hồi cho trình duyệt và trong chính bản thân đó, chúng tôi có thể tạo tập lệnh để gọi. – Ved

Trả lời

5

Không thể gọi hàm java script từ servlet. Thay vào đó, bạn có thể in mã javascript sử dụng

response.getOutputStream().println("[javascript code]");

vào trình duyệt và sau đó là chức năng javascript sẽ được thực hiện trong trình duyệt.

+0

điều này không làm việc cho tôi: (nó chỉ in ra các kịch bản java trên trình duyệt rõ ràng, và không có exdecution mã này xảy ra.xin vui lòng giúp đỡ.đây là những gì tôi đang làm, \t response.getOutputStream(). Println ("var ps = document.getElementsByClassName (\" thông điệp \ ");" \t \t \t \t \t \t \t \t \t \t \t \t \t \t \t + "ps.innerHtm = \ "DONE \" "); –

+0

Bạn phải sử dụng thẻ script cùng với mã script java của bạn như response.getOutputStream(). println (" "); –

2

Bạn có thể đạt được loại hành vi tương tự bằng cách sử dụng phương pháp sau. Trong khi gửi phản hồi, bạn có thể cung cấp các sự kiện JS.

PrintWriter out = response.getWriter(); 
out.println("<tr><td><input type='button' name='Button' value='Search' onclick=\"searchRecord('"+ argument + "');\"></td></tr>"); 

Vì vậy, khi bạn nhấp vào nút Tìm kiếm, phương thức ghi tìm kiếm của JS sẽ được gọi.

1

Bạn cần hiểu rằng một servlet chạy trong máy chủ web, không phải trong trình duyệt web và JS đó chạy trong trình duyệt web, không phải trong máy chủ web. Cách thực hành thông thường là để servlet chuyển tiếp yêu cầu tới một tệp JSP mà lần lượt tạo ra mã HTML/CSS/JS được gửi đến trình duyệt web bởi máy chủ web. Cuối cùng, tất cả mã HTML/CSS/JS đó được thực thi trong trình duyệt web.

Để đạt được yêu cầu chức năng (hơi lạ, tbh) của bạn, chỉ cần để JSP được chuyển tiếp có điều kiện trả về cuộc gọi tập lệnh cụ thể. Ví dụ như sau với JSTL<c:if>, giả định rằng bạn đã thu thập và thiết lập các lỗi như ${errors} ở định dạng mảng JSON:

<c:if test="${not empty errors}"> 
    <script>displayErrors(errors);</script> 
</c:if> 

Hoặc hãy JSP gán nó như là một biến JS và để JS xử lý nó hơn nữa. Một cái gì đó như:

<script> 
    var errors = ${errors}; 

    if (errors.length) { 
     displayErrors(errors); 
    } 
</script> 

Đối với yêu cầu là kỳ lạ, nếu bạn buộc phải sử dụng JS để hiển thị các thông điệp, mà chỉ có thể có nghĩa là bạn đang sử dụng một cái gì đó alert() hay. Điều này là rất 90 và không thân thiện với người dùng. Chỉ cần để JSP tạo ra HTML cho phù hợp rằng chúng được đặt bên cạnh các trường nhập liệu, hoặc trong một danh sách ở trên cùng của biểu mẫu. Our servlets wiki page có ví dụ về hello world thực hiện chính xác như thế.

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