jsp方法在javascript方法中运行不正常

时间:2013-05-17 06:33:52

标签: java javascript jsp

在我的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方法之前执行。什么是确切的问题和这个问题的解决方案。请尽快回复。

提前致谢...

3 个答案:

答案 0 :(得分:2)

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

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

我还没有看到或听说过你在帖子中指定的 JSP按钮

答案 1 :(得分:1)

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

 location.href=/packagename/ServletName'

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

答案 2 :(得分: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>

希望它会对你有所帮助。