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”的东西
您需要一个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 框架,该框架高度抽象了所有这些样板,例如JSF、Spring MVC、Struts2等。
使用 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)
| 归档时间: |
|
| 查看次数: |
13279 次 |
| 最近记录: |