目前所做的项目中,用到了一个表单提交。因为不太会用jsp操作数据库,所以用Ext为前台,jsp中间传数据,java作为真正后台操作数据库。
所以上出现了一个问题,Ext表单提交的success和failure,是提交到jsp就判定success了还是说数据库操作完成后才算success。
当然对于人类来讲,数据库操作成功了才应该返回success。但是对于电脑而言,无论你数据库操作之后返回true(代表操作成功)或者false(代表操作失败),jsp的代码依然会继续执行,给前台返回success信息。如下代码:
<%@ page language="java" import="java.util.*" pageEncoding="GBK"%>
<jsp:useBean id="OnAdd" class="tree.OnAdd"></jsp:useBean>
<%
String userInfo=request.getParameter("userInfo"); //获取前台传来的数据
System.out.println(userInfo);
OnAdd.setParam(userInfo); //java后台设置参数
%>
<%=OnAdd.trans()%> //后台操作,返回值为true或false,代表数据库操作成功与否
到<%=OnAdd.trans()%>这,对于电脑而言只是一个boolean的值而已,如果单纯的在前台输出消息,那么一定是有隐患的。我认为它只代表了提交到jsp部分是成功的,往后它就不管了,但是我们不能不管。
success : function() { //单纯的返回
Ext.Msg.alert('信息', '成功');
},
failure : function() {
Ext.Msg.alert('信息','错误');
}
所以,要在这个返回的基础上,再一次做出判断,完整的提交如下:
var values=addForm.getForm().getValues(); //获得表单所有值,必须getForm以获得BasicForm
Ext.Ajax.request({ //Ajax提交
url : 'Add.jsp',
params:{userInfo:Ext.encode(values)},
waitTitle:'正在提交',
waitMsg:'正在提交数据,请稍后',
success : function(resp) {
if(resp.responseText==false) //如果数据库操作返回false,代表操作失败
{
Ext.Msg.alert('信息', '不成功');}
else{ //二次判断,防止给出错误的提示 Ext.Msg.alert('信息', '成功'); }
},
failure : function() {
Ext.Msg.alert('错误');
}
});
这是目前我所会的东西。感觉前端、中间、后台传递方式有点繁琐,但是我不会直接用jsp操作数据库所以只能这样。以上拙见,便于记录此时的见解,或许以后会有更好的方式我会学到。