2011-07-22 38 views
9

Nếu chúng ta viết một cái gì đó như sau:Gửi vào click href trong JSP

<a href="MyServlet">Link</a> 

Nó sẽ gọi phương thức GET của servlet đó. Tôi có thể gửi yêu cầu đăng bài bằng cách nhấp vào thẻ a không? Có thể không?

Tôi biết cách làm điều này với Javascript nhưng muốn biết liệu điều này có thể được thực hiện mà không có JavaScript hay không.

Trả lời

24

Giải pháp là bao quanh neo trong một biểu mẫu có phương thức đăng và hành động bạn muốn thực thi. Trên neo đặt một javascript để gửi biểu mẫu

<form name="submitForm" method="POST" action="/servlet/ServletName"> 
    <input type="hidden" name="param1" value="param1Value"> 
    <A HREF="javascript:document.submitForm.submit()">Click Me</A> 
</form> 

chỉnh sửa

Tôi nghĩ tôi nên đề cập đến rằng đây không phải là một ý tưởng tốt.

Liên kết đưa bạn đến các trang, đó là những gì người dùng hiểu họ làm. Để phá vỡ các giả định của người dùng và gây ra một liên kết đến POST, để làm một điều không thể thu hồi, thường được coi là một ý tưởng tồi.

Sử dụng nút, gắn nhãn theo ngữ nghĩa, sau đó người dùng của bạn biết rằng nhấp vào đây sẽ làm điều gì đó.


thứ hai chỉnh sửa

tôi thực sự cần phải nhấn mạnh rằng đây không phải là một ý tưởng tốt ở tất cả.

Điều này sẽ phá vỡ internet.

+0

Nice! Đừng quên tạo phương thức javascript sẽ được gọi bởi HREF – dellasavia

+0

@dellasavia phương thức javascript được gọi là 'document.submitForm.submit()' thực sự là hàm gửi kèm theo biểu mẫu có tên submitForm. Nó được tạo bởi DOM. –

+0

Không hoạt động trong phiên bản chrome mới nhất – Pascalius

0

Chỉ với javascript: tạo ra một <form action="MyServlet"> và trình với form.submit()

Bạn cũng có thể gửi POST với ajax (với jQuery: $.post("MyServlet", {param:param}))

Nhưng suy nghĩ về ngữ nghĩa. Với POST bạn nên đăng dữ liệu. Và các liên kết thường đơn giản là nhận tài nguyên. (Đó là một câu chuyện khác nếu liên kết của bạn thực sự là một nút ngụy trang)

+0

Tôi biết cách này nhưng tôi muốn biết nếu tôi có thể làm điều đó mà không cần Java scirpt và từ. –

+0

Làm sao tôi biết bạn biết? :) Không, không có cách nào khác – Bozho

+0

Sai lầm của tôi tôi nên đề cập đến nó trong câu hỏi của tôi. –

0

Mã cho trang login.jsp:

<%@ page language="java" contentType="text/html; charset=ISO-8859-1" 
    pageEncoding="ISO-8859-1"%> 
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> 

<html> 
<head> 
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"> 
<title>Login Page</title> 
</head> 
<body> 
    <form action="LoginServlet" method="post" name="credential"> 

    Please enter userName : 
    <input type="text" name="un"><br> 

    Please enter PassWord : 
    <input type="text" name="pw"><br> 

    <input type="submit" value="Submit"> 
    </form> 
    <form action="registerUser" name="registerUserForm" method="post"> 
    If no user name and password then get a new one by <a href="registerUser">clicking</a> here 
    </form> 
</body> 
</html> 



code for registerUser servlet:: 
package examplePackage; 

import java.io.IOException; 
import java.io.PrintWriter; 

import javax.servlet.ServletException; 
import javax.servlet.annotation.WebServlet; 
import javax.servlet.http.HttpServlet; 
import javax.servlet.http.HttpServletRequest; 
import javax.servlet.http.HttpServletResponse; 

@WebServlet("/registerUser") 
public class registerUser extends HttpServlet { 
    private static final long serialVersionUID = 1L; 

    public registerUser() { 
     super(); 
    } 

    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { 
     PrintWriter out = response.getWriter(); 
     out.println("registerUser"); 
    } 

    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { 
     doGet(request,response); 
    } 
} 
Các vấn đề liên quan