2013-05-17 43 views
0

在我的jsp頁面 中我有一個jsp按鈕,像這樣。jsp方法在javascript方法中運行不正常

 <input class="submit_button" type="submit" name="Payment" value="Payment"   
    style="position: absolute; left: 350px; top: 130px;" 
    onclick="javascript:payment();"> 

而且我有onclick javascript函數調用jsp方法「callProcedure()」這樣。

<script> 
    function payment(){ 
    alert('Payment done successfully...'); 
    <%     
     callProcedure(); // calls the procedure      
    %> 
</script> 

,而JSP方法callProcedure()調用這樣

<%! void callProcedure() { 
    CallableStatement cst = null; 
    Connection conn = null;  

    try { 

     DBDataSource dbDataSource = new DBDataSource(); 
     conn = dbDataSource.makeConnection(); 
     conn.setAutoCommit(false);   
     String insertStoreProc = "{call 
     p_webservice_test(?,?,?,?,?,?,?,?,?,?,?,?,?,?)}"; 
     cst = conn.prepareCall(insertStoreProc); 

     cst.setString(1, TransID); 
     cst.setString(2, RemitNo); 
     cst.setString(3, senderFName + senderMName + senderLName); 
     cst.setString(4, RFName + RMName + RLName); 
     cst.setString(5, RAddr); 
     cst.setString(6, RPh); 
     cst.setString(7, Relshp); 
     cst.setString(8, tDate.toString()); 
     cst.setString(9, PayCur); 
     cst.setBigDecimal(10, paymentAmt); 
     cst.setString(11, Pcode); 
     cst.registerOutParameter(12, Types.VARCHAR); 
     cst.executeUpdate(); 
     conn.commit(); 

    } catch (SQLException e) { 
     System.out.println("Error:::" + e.getMessage()); 
    } finally { 
     if (cst != null) { 
      try { 
       cst.close(); 
      } catch (Exception ex) { 
       System.out.println("Error:" + ex.getMessage()); 
      } 
     } 
    } 
} 
%> 

這裏Oracle過程,我的問題是:JSP法「callProcedure()」點擊按鈕前或執行前執行javascript方法。這個問題的具體問題和解決方案是什麼。請儘可能儘快回覆。

在此先感謝...

+0

所有JSP都在服務器上運行,所以你不能在JavaScript事件上調用jsp方法。 –

+0

我應該怎麼做才能調用jsp按鈕上的jsp方法點擊? – Suniel

+0

看看我編輯的答案。 –

回答

2

所有JSP甚至加載頁面之前在服務器上運行。你看到的是jsp頁面的輸出。所以你不能在JavaScript事件上調用jsp方法。 在你的情況下,jsp方法在服務器上執行,結果會顯示給你。

你可以把callProcedure()方法的代碼在一些小服務程序,然後使用輸入按鈕,你可以提交表單的servlet,它會調用callProcedure()方法和顯示結果n個頁面

還有一我沒有看到或聽說過你在帖子中指定的JSP按鈕

+0

非常感謝。但是可以將過程中使用的jsp頁面的值(如TransID,RemitNo)傳遞給servlet嗎? – Suniel

+0

@Suniel:如果這些屬性對於每個用戶都是唯一的,您可以將它們存儲爲會話屬性,然後servlet可以從會話中獲取這些屬性。 –

+0

我試過了,但它給出了空值。我可以在servlet中調用jsp頁面的java方法嗎? – Suniel

1

避免在JavaScript中直接調用方法重定向到servlet並調用您的callProcedure()方法。

location.href=/packagename/ServletName' 

我的建議寫在jsp中的java代碼不是一個好的做法。

1

我的建議是通過點擊按鈕來調用servlet。在那個servlet裏面調用你的過程,並按照會話返回結果(如果有結果的話)到同一頁面。

submit按鈕更改爲僅button

<input class="submit_button" type="button" name="Payment" 
    value="Payment"   
    style="position: absolute; left: 350px; top: 130px;" 
    onclick="javascript:payment();"> 

像下面的JavaScript函數: -

<script language="javascript"> 

function payment(){ 
    document.formname.action="<%=request.getContextPath()%>/servletpath/myservlet"; 
    document.formname.submit(); 
} 
</script> 

希望它會幫助你。

+0

我可以在servlet中調用jsp頁面的方法嗎? – Suniel

+0

更好的是,您定義了servlet中的jsp方法並將結果返回給JSP。 –