2011-07-22 23 views
9

Si escribimos algo como sigue:al hacer clic con href en JSP

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

método GET de ese servlet Se llamará. ¿Puedo enviar una solicitud postal al hacer clic en la etiqueta a? ¿Es posible?

Sé cómo hacer esto con Javascript, pero quiero saber si esto se puede hacer sin JavaScript.

Respuesta

24

La solución es rodear el ancla en un formulario, que tiene el método de publicación y la acción que desea ejecutar. Por poner un ancla Javascript para enviar el formulario

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

edición

Creo que debo mencionar que esta no es una buena idea.

Los enlaces lo llevan a las páginas, eso es lo que los usuarios entienden que deben hacer. Romper las suposiciones de los usuarios y provocar un enlace a POST, hacer algo irrevocable, generalmente se considera una mala idea.

Utilice un botón, etiquételo semánticamente, entonces su usuario sabe que al hacer clic en hace algo.


segunda edición

Es realmente necesario hacer hincapié en que esto no es una buena idea en absoluto .

Esto rompe el internet. Código

+0

¡Agradable! No olvide crear el método javascript que será llamado por HREF – dellasavia

+0

@dellasavia El método javascript que se llama 'document.submitForm.submit()' es en realidad la función de envío adjunta al formulario denominado submitForm. Fue creado para ti por el DOM. –

+0

No funciona en la última versión de Chrome – Pascalius

0

Sólo con javascript: crear un <form action="MyServlet"> y enviarlo con form.submit()

También puede enviar POST con el Ajax (con jQuery: $.post("MyServlet", {param:param}))

Pero piensa en la semántica. Con POST debe publicar de datos. Y los enlaces generalmente solo obtienen recursos. (Es otra historia si su enlace es realmente un botón disfrazado)

+0

sé esta manera, pero me gustaría saber si puedo hacerlo sin scirpt de Java y. –

+0

¿Cómo puedo saber que lo sabes? :) No, no hay otra forma – Bozho

+0

Mi error debería mencionarlo en mi pregunta. –

0

de la página 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); 
    } 
} 
Cuestiones relacionadas