2011-07-22 14 views
9

Jeśli coś napisać następujące:Wysłać postu prośba o kliknięcie href w JSP

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

To będzie wywołanie metody GET tego serwletu. Czy mogę wysłać wiadomość pocztową po kliknięciu znacznika a? Czy to możliwe?

Wiem, jak to zrobić z Javascriptem, ale chcę wiedzieć, czy można to zrobić bez JavaScript.

Odpowiedz

24

Rozwiązaniem jest otoczyć kotwicę w formularzu, który ma metodę postu i akcję, którą chcesz wykonać. Na kotwicy umieścić javascript, aby wysłać formularz

<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> 

edit

myślę, że powinienem wspomnieć, że to nie jest dobry pomysł.

Łącza prowadzą do stron, tak je użytkownicy rozumieją. Aby złamać założenia użytkowników i spowodować link do POST, zrobić nieodwołalną rzecz, jest ogólnie uważany za zły pomysł.

Użyj przycisku, oznacz go semantycznie, a następnie użytkownik wie, że kliknięcie tego przycisku powoduje wykonanie czynności pod numerem.


druga edycja

naprawdę muszę podkreślić, że nie jest to dobry pomysł wcale.

To łamie internet.

+0

Nice! Nie zapomnij o utworzeniu metody javascript, która będzie wywoływana przez HREF – dellasavia

+0

@ dellasavia Metoda javascript nazywająca się 'document.submitForm.submit()' jest faktycznie funkcją przesyłania dołączoną do formularza o nazwie submitForm. Został stworzony dla Ciebie przez DOM. –

+0

Nie działa w najnowszej wersji chrome – Pascalius

0

Tylko z javascript: tworzenie <form action="MyServlet"> i złożyć go z form.submit()

Można również wysłać POST z AJAX (jQuery: $.post("MyServlet", {param:param}))

Ale pomyśl o semantyce. Z POST powinieneś opublikować dane. Linki są zwykle po prostu uzyskiwania zasobów. (To inna historia, jeśli twój link jest w rzeczywistości przebranym przyciskiem)

+0

Znam ten sposób, ale chcę wiedzieć, czy mogę to zrobić bez scirpt Java iz. –

+0

Skąd mam wiedzieć, że to wiesz? :) Nie, nie ma innej drogi. – Bozho

+0

Mój błąd powinienem wspomnieć o tym w moim pytaniu. –

0

Kod strony 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); 
    } 
} 
Powiązane problemy