30

私のJavaファイルは次のとおりです。

public class MyClass {

    public void method1() {    
        // some code
    }

    public void method2() {
        //some code
    }

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

私の JSP ページには、3 つの HTML ボタンがあります。

をクリックするbutton1と のみmethod1が呼び出され、 をクリックするとbutton2のみmethod2が実行され、 をbutton3クリックすると のみが実行method3されます。

どうすればこれを達成できますか?

4

4 に答える 4

52

個々のボタン要素に一意の名前を付けるだけです。ボタンを押すと、入力要素の場合と同様に、ボタンの名前がリクエストパラメータとして使用できるようになります。

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

}

参照:

于 2013-02-06T13:20:33.823 に答える
3

各ボタンにaction="#{yourBean.function1}"を追加してみてください(もちろん、メソッドfunction2、function3、または必要なものを変更してください)。それでも問題が解決しない場合は、onclickイベントで同じことを試すことができます。

とにかく、使用しようとしているボタンの種類、a4j:commandButton、または使用しているものを教えていただければ、より簡単にサポートできます。

于 2013-02-06T12:39:02.817 に答える
3
<form method="post" action="servletName">   
     <input type="submit" id="btn1" name="btn1"/>
     <input type="submit" id="btn2" name="btn2"/>
</form>  

それを押すと、リクエストはサーブレットページのサーブレットに移動し、どのボタンが押されたかを確認し、必要なメソッドを objectName.method として呼び出します

于 2013-02-06T10:28:17.087 に答える