web-dev-qa-db-fra.com

Envoyer une demande de post sur clic de href dans JSP

Si nous écrivons quelque chose comme suit:

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

Il appellera la méthode GET de cette servlet. Puis-je envoyer une demande de publication en cliquant sur la balise a? C'est possible?

Je sais comment faire cela avec Javascript mais je veux savoir si cela pourrait se faire sans JavaScript.

11
Harry Joy

La solution consiste à entourer l'ancre dans un formulaire contenant la méthode de publication et l'action que vous souhaitez exécuter. Sur l'ancre, mettez un javascript pour soumettre le formulaire

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

modifier

Je pense que je devrais mentionner que ce n'est pas une bonne idée.

Les liens vous dirigent vers des pages, c'est ce que les utilisateurs comprennent. Casser les hypothèses des utilisateurs et créer un lien vers POST, faire une chose irrévocable, est généralement considéré comme une mauvaise idée.

Utilisez un bouton, étiquetez-le sémantiquement, alors votre utilisateur saura que cliquer sur ce fait quelque chose .


deuxième édition

Je dois vraiment souligner que ce n'est pas une bonne idée du tout .

Cela casse l'internet.

25
Michael Allen

Seulement avec javascript: créez un <form action="MyServlet"> et soumettez-le avec form.submit()

Vous pouvez également envoyer POST avec ajax (avec jQuery: $.post("MyServlet", {param:param}))

Mais pensons à la sémantique. Avec POST, vous devriez poster data. Et les liens obtiennent généralement simplement des ressources. (C'est une autre histoire si votre lien est en fait un bouton déguisé)

0
Bozho

Code pour la page 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);
    }
}
0
user5892314