30

我的Java文件是:

public class MyClass {

    public void method1() {    
        // some code
    }

    public void method2() {
        //some code
    }

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

在我的 JSP 页面中,我有三个 HTML 按钮。

如果单击button1,则 onlymethod1将被调用,如果单击,button2则仅method2将执行,如果单击button3,则仅method3,依此类推。

我怎样才能做到这一点?

4

4 回答 4

52

只需给各个按钮元素一个唯一的名称。按下时,按钮的名称可用作请求参数,就像输入元素一样。

您只需要确保按钮输入具有type="submit"in<input type="submit">not<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
<form method="post" action="servletName">   
     <input type="submit" id="btn1" name="btn1"/>
     <input type="submit" id="btn2" name="btn2"/>
</form>  

按下它时,请求将转到 servlet 页面上的 servlet,检查按下了哪个按钮,然后相应地调用所需的方法作为 objectName.method

于 2013-02-06T10:28:17.087 回答
3

您可以尝试在每个按钮上添加 action="#{yourBean.function1}" (当然更改方法 function2、function3 或您需要的任何内容)。如果这不起作用,您可以尝试使用 onclick 事件。

无论如何,如果您告诉我们您要使用什么样的按钮,a4j:commandButton 或您正在使用的任何按钮,会更容易为您提供帮助。

于 2013-02-06T12:39:02.817 回答
0

如果你有 web.xml 然后

HTML/JSP

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

web.xml

<servlet>
        <display-name>Servlet Name</display-name>
        <servlet-name>myservlet</servlet-name>
        <servlet-class>package.SomeController</servlet-class>
</servlet>
<servlet-mapping>
    <servlet-name>myservlet</servlet-name>
    <url-pattern>/myservlet</url-pattern>
</servlet-mapping>

Java SomeController.java

public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        System.out.println("Write your code below");
}
于 2018-03-01T15:31:27.253 回答