在我的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方法之前执行。什么是确切的问题和这个问题的解决方案。请尽快回复。
提前致谢...
答案 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>
希望它会对你有所帮助。