【问题标题】:How do I call a specific Java method on a click/submit event of a specific button in JSP?如何在 JSP 中特定按钮的单击/提交事件上调用特定的 Java 方法?
【发布时间】:2013-01-21 08:10:49
【问题描述】:

我的 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,等等.

我怎样才能做到这一点?

【问题讨论】:

  • 您将请求提交给 Servlet 并有条件地从 servlet 调用所需的函数。
  • 你不能直接这样做,因为JavaScript在客户端运行,JSP在服务器端运行,所以你需要将你的请求提交给servlet,servlet会处理并返回结果。您可以使用 AJAX 异步执行此操作
  • 是训练任务吗?你打算使用网络框架吗?
  • 您能否仅从家用计算机上的 Internet 页面进行此测试,而无需使用服务器。我可以在我的桌面上创建一个页面,然后使用它来调用将调用 java 方法的类中的方法吗?

标签: jsp servlets


【解决方案1】:

如果你有 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");
}

【讨论】:

    【解决方案2】:

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

    您只需要确保按钮输入具有type="submit",如&lt;input type="submit"&gt;&lt;button type="submit"&gt; type="button",这只会为@ 呈现一个“死”按钮987654327@ 东西等等。

    例如

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

    或者,使用&lt;button type="submit"&gt; 而不是&lt;input type="submit"&gt;,那么您可以给它们都赋予相同的名称,但具有唯一值。 &lt;button&gt; 的值不会用作标签,您可以将自己指定为孩子。

    例如

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

    另见:

    【讨论】:

      【解决方案3】:

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

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

      【讨论】:

        【解决方案4】:
        <form method="post" action="servletName">   
             <input type="submit" id="btn1" name="btn1"/>
             <input type="submit" id="btn2" name="btn2"/>
        </form>  
        

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

        【讨论】:

        • 在过去的六个月里我使用了很多Java,所以我对代码相当熟悉。然而,我不必开发任何使用 java 类来调用按钮的页面。我可以使用公共方法创建类,然后让我的网页使用 JQuery 或其他中间语言调用每个方法吗?
        • @DougHauf 您可以为此使用 servlet。 javascript 可以使用 Servlet 的 post 和 get 方法。这篇文章将让您大致了解它的工作原理doublecloud.org/2012/12/…
        猜你喜欢
        • 2014-02-20
        • 2019-05-29
        • 2012-01-09
        • 2013-02-11
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-08-28
        相关资源
        最近更新 更多