通过 <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>
所以这是我用来发送包含值 ${masession.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>