从按钮中调用JSP中的bean

时间:2013-01-18 14:43:14

标签: java jsp java-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();} %>

有什么办法比较容易吗?或者这是正确的方法吗?

ps:我不想使用javascript

编辑:我的类只有一个方法“print”,在system.out.println中输出类似“test”的内容

3 个答案:

答案 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框架,它在很大程度上抽象出所有这些样板,例如JSFSpring MVCStruts2等。

使用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调用回服务器(除非您要刷新整个页面,这有点废话)。