Как я могу вызвать конкретный метод Java при нажатии/отправке события определенной кнопки в JSP?

Мой файл Java:

public class MyClass {

    public void method1() {    
        // some code
    }

    public void method2() {
        //some code
    }

    public void method3() {
        //some code
    }
}

На моей странице JSP есть три кнопки HTML.

Если я нажму на button1, тогда будет вызван только method1, если я нажму на button2, тогда будет выполняться только method2, а если button3, то только method3 и т.д..

Как я могу это достичь?

Ответ 1

Просто укажите отдельным элементам кнопки уникальное имя. При нажатии имя кнопки доступно как параметр запроса обычным способом, например, с элементами ввода.

Вам нужно только убедиться, что входы кнопок имеют type="submit", как в <input type="submit"> и <button type="submit">, а не type="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> не будет использоваться как метка, вы можете просто указать, что вы являетесь дочерним.

например.

<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);
    }

}

См. также:

Ответ 2

<form method="post" action="servletName">   
     <input type="submit" id="btn1" name="btn1"/>
     <input type="submit" id="btn2" name="btn2"/>
</form>  

при нажатии на него запрос перейдет на сервлет на странице сервлета, чтобы проверить, какая кнопка нажата, а затем, соответственно, вызовите необходимый метод как objectName.method

Ответ 3

Вы можете попробовать добавить к каждой кнопке action = "# {yourBean.function1}" (смена, конечно, метода function2, function3 или того, что вам нужно). Если это не сработает, вы можете попробовать то же самое с событием onclick.

Во всяком случае, было бы проще помочь вам, если вы сообщите нам, какие кнопки вы пытаетесь использовать, a4j: commandButton или все, что вы используете.