0

在我的 jsp 页面中,我有一个这样的 jsp 按钮。

     <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()这样调用oracle过程

<%! 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());
            }
        }
    }
}
%>

在这里,我的问题是jsp方法“callProcedure()”在单击按钮或执行javascript方法之前执行。什么是这个问题的确切问题和解决方案。请尽可能尽快回复。

提前致谢...

4

3 回答 3

2

所有 JSP 甚至在加载页面之前都在服务器上运行。你看到的是jsp页面的输出。所以你不能在 javascript 事件上调用 jsp 方法。在您的情况下,jsp 方法正在服务器上执行,结果显示给您。

您可以将callProcedure()方法的代码放在某个 servlet 中,然后使用输入按钮将表单提交给 servlet,servlet 将调用该callProcedure()方法并在页面上显示结果

正如您在帖子中指定的那样,我还没有看到或听说过关于JSP 按钮的另一件事。

于 2013-05-17T06:40:53.323 回答
1

避免在 javascript 中直接调用方法重定向到 servlet 并调用您的 callProcedure() 方法。

 location.href=/packagename/ServletName'

我的建议在 jsp 中编写 java 代码不是一个好习惯。

于 2013-05-17T06:44:23.833 回答
1

我的建议是通过单击按钮调用 servlet。在该 servlet 内部调用您的过程并通过会话将结果(如果存在任何结果)返回到同一页面。

submit将按钮更改为 only 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>

希望它会帮助你。

于 2013-05-17T06:52:24.237 回答