如何在JSP中的特定button的点击/提交事件时调用特定的Java方法?

我的Java文件是:

public class MyClass { public void method1() { // some code } public void method2() { //some code } public void method3() { //some code } } 

在我的JSP页面中,我有三个HTMLbutton。

如果我点击button1 ,那么只有method1会被调用,如果我点击button2那么只有method2会执行,如果button3 ,那么只有method3 ,等等。

我怎样才能做到这一点?

只要给每个button元素一个独特的名字。 当按下时,button的名字可以像请求input元素一样用作请求参数。

您只需确保buttoninput的type="submit"<input type="submit"><button type="submit">不是 type="button" ,它只会呈现“死”button纯粹为了onclick东西和所有。

例如

 <form action="${pageContext.request.contextPath}/myservlet" method="post"> <input type="submit" name="button1" value="Button 1" /> <input type="submit" name="button2" value="Button 2" /> <input type="submit" name="button3" value="Button 3" /> </form> 

 @WebServlet("/myservlet") public class MyServlet extends HttpServlet { @Override protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { MyClass myClass = new MyClass(); if (request.getParameter("button1") != null) { myClass.method1(); } else if (request.getParameter("button2") != null) { myClass.method2(); } else if (request.getParameter("button3") != null) { myClass.method3(); } else { // ??? } request.getRequestDispatcher("/WEB-INF/some-result.jsp").forward(request, response); } } 

或者,使用<button type="submit">而不是<input type="submit"> ,那么你可以给它们所有相同的名字,但是一个唯一的值。 <button>的值不会被用作标签,你可以将自己指定为child。

例如

 <form action="${pageContext.request.contextPath}/myservlet" method="post"> <button type="submit" name="button" value="button1">Button 1</button> <button type="submit" name="button" value="button2">Button 2</button> <button type="submit" name="button" value="button3">Button 3</button> </form> 

 @WebServlet("/myservlet") public class MyServlet extends HttpServlet { @Override protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { MyClass myClass = new MyClass(); String button = request.getParameter("button"); if ("button1".equals(button)) { myClass.method1(); } else if ("button2".equals(button)) { myClass.method2(); } else if ("button3".equals(button)) { myClass.method3(); } else { // ??? } request.getRequestDispatcher("/WEB-INF/some-result.jsp").forward(request, response); } } 

也可以看看:

  • Servlet返回“HTTP状态404请求的资源(/ servlet)不可用”
  • 如何通过单击JSP页面中的超链接或button将当前项传递给Java方法?
 <form method="post" action="servletName"> <input type="submit" id="btn1" name="btn1"/> <input type="submit" id="btn2" name="btn2"/> </form> 

按下它的请求会去servlet页面上的servlet检查哪个button被按下,然后相应地调用所需要的方法作为objectName.method

您可以尝试在每个button上添加action =“#{yourBean.function1}”(当然也可以改变方法function2,function3或任何您需要的)。 如果这不起作用,你可以尝试onclick事件。

无论如何,如果您告诉我们您尝试使用哪种button,a4j:commandButton或您正在使用的任何button,将会更容易帮助您。