当我点击按钮时如何从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();} %>
有什么办法比较容易吗?或者这是正确的方法吗?
ps:我不想使用javascript
编辑:我的类只有一个方法“print”,在system.out.println中输出类似“test”的内容
答案 0 :(得分:4)
您需要servlet(&lt; - 点击链接,它不包含在装饰中)。
如果您要定位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();
}
}
按如下方式修复JSP的<body>
(前提是JSP文件放在Web内容的根目录而不是子文件夹中):
<form action="hello" method="post">
<input type="submit" name="myButton" value="button" />
</form>
就是这样。
servlet通过@WebServlet
注册,侦听相对于上下文根的/hello
URL。指示HTML表单相对于JSP页面本身的URL提交到该URL。 method="post"
将调用servlet的doPost()
方法,您可以自由地写下所需的Java代码。
如果您想要更精细的控制,具体取决于按下的按钮,请为该按钮指定一个唯一的名称。
<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>
然后您可以在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.
}
一个完全不同的选择是寻找一个现有的MVC框架,它在很大程度上抽象出所有这些样板,例如JSF,Spring MVC,Struts2等。
使用JSF,它看起来像这样(你只需要通过其后继Facelets替换遗留JSP; Facelets的外观如何在一个理智的JSF教程中解释,再次点击上一段中的“JSF”链接了解详情):
<h:form>
<h:commandButton value="button1" action="#{bean.button1}" />
<h:commandButton value="button2" action="#{bean.button2}" />
<h:commandButton value="button3" action="#{bean.button3}" />
</h:form>
只有这个类没有丑陋的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");
}
}
答案 1 :(得分:0)
为什么不使用servlet和MVC模式,你不需要在JSP中编写java方法。
答案 2 :(得分:0)
令人困惑的是,JSP中涉及的代码位以及浏览器显示的结果HTML正在运行。
JSP内部可访问的bean在处理HTTP请求时在servlet容器中(在服务器上),并且从JSP生成HTML,而触发onclick事件的按钮位于客户端浏览器 - 因此按钮无法直接调用bean。
为了在单击按钮时调用服务器端逻辑,您需要将AJAX调用回服务器(除非您要刷新整个页面,这有点废话)。