2013-01-18 33 views
1

當我點擊按鈕時,如何從jsp調用方法?在按鈕中調用JSP中的bean

我寫了這個代碼,但不工作..

<%@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

編輯:我剛纔類有一個方法「打印」,在打印的System.out.println類似「測試」

+2

它看起來像你學習Java的Web應用程序。從[JSP](http://stackoverflow.com/tags/jsp/info)和[Servlets](http://stackoverflow.com/tags/servlets/info)SO維基開始將是一件好事。 –

+0

你在哪裏創建一個bean? –

+0

該bean應該是MyClass myclass = new MyClass(),myclass.print()。但我認爲是相同的,只是調用新的MyClass.print() – user1851366

回答

4

你需要一個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(); 
    } 

} 

和修復你的JSP的<body>如下(提供該JSP文件被放置在Web內容的根,而不是在一個子文件夾):

<form action="hello" method="post"> 
    <input type="submit" name="myButton" value="button" /> 
</form> 

就是這樣。

該servlet通過@WebServlet註冊以聽取相對於上下文根的/hello的URL。指示HTML表單準確提交該URL,相對於JSP頁面本身的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> 

只有這個類不難看,如果/別人的:

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

} 
+0

Ty爲您的答案。我會做那樣的事情 – user1851366

0

爲什麼不使用servlet和MVC模式,您無需在JSP中編寫Java方法。

+0

MVC還返回一個jsp – user1851366

0

您很困惑JSP中涉及的代碼位和瀏覽器顯示的結果HTML在哪裏運行。

在處理HTTP請求和從JSP生成HTML時,JSP內部可訪問的bean位於Servlet容器(服務器上),而觸發onclick事件的按鈕位於內部客戶端瀏覽器 - 因此該按鈕無法直接調用該bean。

爲了在點擊按鈕時調用服務器端邏輯,您需要將AJAX調用回服務器(除非您要刷新整個頁面,這有點廢話)。