从按钮调用 JSP 中的 bean

use*_*366 2 java jsp jakarta-ee

当我单击按钮时,如何从 jsp 调用方法?

我写了这段代码,但不起作用..

<%@page import="my.package.class.MyClass" %>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">

</head>
<body>
<input type="submit" name="myButton" value="button" onclick="callMethod()"/>
</body>
</html>

<%! 
void callMethod(){ 
new MyClass().print();} %>
Run Code Online (Sandbox Code Playgroud)

有没有更简单的方法?或者这是正确的做法?

ps:我不想使用javascript

编辑:我的班级只有一个方法“print”,它在 system.out.println 打印类似“test”的东西

Bal*_*usC 5

您需要一个servlet( <-- 单击链接,它不包含在装饰中)。

就此而言,假设您的目标是 Servlet 3.0 容器(Tomcat 7、Glassfish 3 等),那么只需创建此类:

@WebServlet("/hello")
public class HelloServlet extends HttpServlet {

    @Override
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        new MyClass().print();
    }

}
Run Code Online (Sandbox Code Playgroud)

<body>并按如下方式修复您的 JSP (假设 JSP 文件位于 Web 内容的根目录而不是子文件夹中):

@WebServlet("/hello")
public class HelloServlet extends HttpServlet {

    @Override
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        new MyClass().print();
    }

}
Run Code Online (Sandbox Code Playgroud)

就是这样。

servlet 通过@WebServlet注册来侦听/hello相对于上下文根的 URL 。指示 HTML 表单提交到该 URL,相对于 JSP 页面本身的 URL。该method="post"会调用servlet的doPost(),其中你都可以自由地写下所需的Java代码的方法。

如果您想要根据按下的按钮进行更细粒度的控制,请为按钮指定一个唯一的名称。

<form action="hello" method="post">
    <input type="submit" name="myButton" value="button" />
</form>
Run Code Online (Sandbox Code Playgroud)

那么您可以在servlet的doPost()方法中按如下方式检查按下的按钮:

if (request.getParameter("myButton1") != null) {
    // button1 is pressed.
}
else if (request.getParameter("myButton2") != null) {
    // button2 is pressed.
}
else if (request.getParameter("myButton3") != null) {
    // button3 is pressed.
}
Run Code Online (Sandbox Code Playgroud)

一个完全不同的替代方案是使用现有的 MVC 框架,该框架高度抽象了所有这些样板,例如JSFSpring MVCStruts2等。

使用 JSF,它看起来像这样(你只需要用它的后继 Facelets 替换旧的 JSP;Facelets 的样子在一个有点理智的 JSF 教程中有解释,同样,单击上一段中的“JSF”链接以获取详细信息):

<form action="hello" method="post">
    <input type="submit" name="myButton1" value="button1" />
    <input type="submit" name="myButton2" value="button2" />
    <input type="submit" name="myButton3" value="button3" />
</form>
Run Code Online (Sandbox Code Playgroud)

只有这个类没有丑陋的 if/elses:

@ManagedBean
@RequestScoped
public class Bean {

    public void button1() {
        System.out.println("button1 invoked");
    }

    public void button2() {
        System.out.println("button2 invoked");
    }

    public void button3() {
        System.out.println("button3 invoked");
    }

}
Run Code Online (Sandbox Code Playgroud)