通过 <a href> 和 jstl 标签将参数从 JSTL 传递到 servlet

Passing parameter from JSTL to servlet through <a href> and jstl tags

所以这是我用来发送包含值 ${masession.idemp}

的参数 "idemp" 的代码
<a href="<c:url value="/consultertickets">
                <c:param name="idemp" value="${masession.idemp}"/>
         </c:url>">
<img src="<c:url value="/inc/liste.png"></c:url>" alt="consulter tickets" />
</a>

当重定向到 servlet“/consultertickets”时,浏览器 URL 显示:

http://localhost:4040/monprojet2/consultertickets?idemp=64

因此参数已传递并且有效,但使用的方法显然是 GET 而不是 POST,这是我在 servlet 中使用的方法,这是 servlet 的代码。

@WebServlet(urlPatterns= {"/consultertickets"})

public class ConsulterTickets extends HttpServlet {

private String VUE = "/WEB-INF/ListeTickets.jsp";

@EJB
private TicketDao ticketDao;
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    this.getServletContext().getRequestDispatcher(VUE).forward(request, response);
}


protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

    CreationTicketForm ticketform = new CreationTicketForm(ticketDao);
    List<Ticket> lticket = ticketform.recupererTickets(request);

    boolean resultat;
    if(lticket.isEmpty())
    {
        //resultat="Vous n'avez soumit aucun ticket";
        resultat = false;
        request.setAttribute("resultat", resultat);
        this.getServletContext().getRequestDispatcher("/ListeTickets2.jsp").forward(request, response);
    }else{
        //String VUE = "/ListeTickets.jsp";
        resultat=true;
        request.setAttribute("resultat", resultat);
        request.setAttribute("lticket", lticket);
        this.getServletContext().getRequestDispatcher(VUE).forward(request, response);
    }
}

}

有什么方法可以通过 POST 方法将参数传递给 servlet,而无需通过 <form></form>

解决方案一:

修改doGet方法

protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    //this.getServletContext().getRequestDispatcher(VUE).forward(request, response);
    doPost(request, response);
}

方案二:

删除 doGet() 并将 doPost() 更改为 service()

编辑1:

看,Hyperlinks<a> 标签)是为了发送 GET 请求而不是 POST.

所以,如果你想使用超链接发送POST请求,没有直接的方法。但是,Javascript 可以为您提供帮助。

使用Javascript你可以引导<a><form>的帮助下发送POST请求。

我只是稍微修改了你的代码。这应该对你有帮助。

<a href="javascript:document.getElementById('form1').submit()">
    <img src="<c:url value="/inc/liste.png"></c:url>" alt="consulter tickets" />
</a>

<form action="<c:url value="/consultertickets"/>" method="post" id="form1">
    <input type="hidden" name="idemp" value="${masession.idemp}"/>
</form>