web-dev-qa-db-fra.com

Comment appeler une méthode spécifique Java sur l'événement click / submit d'un bouton spécifique dans JSP?

Mon fichier Java est:

public class MyClass {

    public void method1() {    
        // some code
    }

    public void method2() {
        //some code
    }

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

Dans ma page JSP, j'ai trois boutons HTML.

Si je clique sur button1, alors seulement method1 sera appelé, si je clique sur button2 alors seulement method2 s'exécutera, et si button3, alors seulement method3, etc.

Comment puis-je atteindre cet objectif?

25
Tushar Sarde

Donnez juste un nom unique aux éléments de bouton individuels. Lorsque vous appuyez sur cette touche, le nom du bouton est disponible comme paramètre de requête de la manière habituelle, comme pour les éléments d'entrée.

Vous devez seulement vous assurer que les entrées des boutons ont type="submit" un péché <input type="submit"> et <button type="submit"> et pas type="button", qui ne rend qu'un bouton "mort" uniquement pour onclick et tout.

Par exemple.

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

avec

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

}

Sinon, utilisez <button type="submit"> au lieu de <input type="submit">, vous pouvez leur donner le même nom, mais une valeur unique. La valeur de la <button> ne sera pas utilisé comme étiquette, vous pouvez simplement spécifier cela vous-même comme enfant.

Par exemple.

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

avec

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

}

Voir également:

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

en appuyant sur cette requête ira à servlet sur la page servlet vérifier quel bouton est enfoncé et ensuite appeler la méthode nécessaire en tant que objectName.method

2
Meherzad

Vous pouvez essayer d'ajouter action = "# {yourBean.function1}" sur chaque bouton (en modifiant bien sûr la méthode function2, function3 ou ce dont vous avez besoin). Si cela ne fonctionne pas, vous pouvez essayer la même chose avec l'événement onclick.

Quoi qu'il en soit, il serait plus facile de vous aider si vous nous indiquez quel type de boutons essayez-vous d'utiliser, a4j: commandButton ou ce que vous utilisez.

2
Sebastián Aguerre