我用Ajax做了这样的一个验证,但是,还是有点问题,请问应该如何解决,怎么来判断一下?
也就相当于一个树型菜单,比如说:
A
A1
A2
B
B1
B2
C
C1
C2我在A的下面再添加一个A1的话,它就会提示"×该类别已存在,请重新输入",这是对的,我已经验证好了,
但是,我要在B1的下面再添加一个A1的话,它还是会提示"×该类别已存在,请重新输入",因为在B1的下面是可以添加A1、A2...的,就是这个问题,请教各位朋友应该如何解决!谢谢!以下是我写的相关代码: /**
* 新增前验证药品类型的有效性
* @param mapping
* @param form
* @param request
* @param response
* @return
* @throws Exception
*/
public ActionForward checkName(ActionMapping mapping, ActionForm form,
HttpServletRequest request, HttpServletResponse response)
throws Exception {
String typename = request.getParameter("typeName");
String typename1 = new String(typename.getBytes("iso-8859-1"),"GBK");
DetachedCriteria dc = DetachedCriteria.forClass(DrugType.class);
dc.add(Restrictions.eq("typeName", typename1));
List list = drugTypeBiz.selAll(dc);
if (list.size() != 0) {
response.getWriter().print("a"); // 类别已存在
} else {
response.getWriter().print("b"); // 类别不存在
}
return null;
}<script language="JavaScript">
//一个初步的开发框架
var http_request = false;
//获取httpXMLHttpRequest对象
function getXHRequest()
{
//开始初始化XMLHttpRequest对象
if(window.XMLHttpRequest) { //Mozilla 浏览器
http_request = new XMLHttpRequest();
if (http_request.overrideMimeType) {//设置MiME类别
http_request.overrideMimeType("text/xml");
}
}
else if (window.ActiveXObject) { // IE浏览器
try {http_request = new ActiveXObject("Msxml2.XMLHTTP");}
catch (e)
{
try {http_request = new ActiveXObject("Microsoft.XMLHTTP");}catch (e) {}
}
}
if (!http_request) { // 异常,创建对象实例失败
window.alert("不能创建XMLHttpRequest对象实例.");
return false;
}
return true;
}
//验证类别名
var typenameFlag=false;
function checkTypename()
{
var typename=document.form1.typeName.value;
var typeMsn = document.getElementById("typeMsn");
if(typename==""||typename==" "||typename==null||typename==" "){
typeMsn.innerHTML="<font color='red'>×类别名不能为空</font>";
}else{
var url="<%=request.getContextPath()%>/drugTypeManage.do?method=checkName&typeName="+typename;
}
if(getXHRequest()){ //getXHRequest()获取httpXMLHttpRequest对象
http_request.onreadystatechange = cInfo;
http_request.open("GET",url, true);
http_request.setRequestHeader("If-Modified-Since","0");
http_request.send();
}
}
function cInfo()
{
if (http_request.readyState == 4) { // 判断对象状态
if (http_request.status == 200) { // 信息已经成功返回,开始处理信息
try {
str = http_request.responseText;
if(str=="a") {
typeMsn.innerHTML="<font color='red'>×该类别已存在,请重新输入</font>";
typenameFlag = "1";
}
else if("b") {
typeMsn.innerHTML="<font color='green'>√此类别名可以使用</font>";
typenameFlag = "2";
}
} catch(e) { }
}
}
}
function tosave(){
var typeName = document.getElementById('typeName').value;
var id = document.getElementById('idno').value;
var parentId = document.getElementById('parentidno').value;
if(typeName==null || typeName=="" || typeName==" "||typeName==" "){
alert("名称不能为空!");
document.getElementById('typeName').focus();
return;
}
if(typenameFlag==1){
alert("该类别名已被使用!");
return;
}
if(typenameFlag==2){
document.form1.action="<%=request.getContextPath()%>/drugTypeManage.do?method=addDrugInfo";
document.form1.submit();
}
}
</script>
这是表(select t.*, t.rowid from drugtype t for update ):
ID PARENTID TYPENAME
0 10 无分类
1 0 A
5 1 A1
6 1 A2
2 0 B
7 2 B1
8 2 B2
3 0 C
9 3 C1
10 3 C2
也就相当于一个树型菜单,比如说:
A
A1
A2
B
B1
B2
C
C1
C2我在A的下面再添加一个A1的话,它就会提示"×该类别已存在,请重新输入",这是对的,我已经验证好了,
但是,我要在B1的下面再添加一个A1的话,它还是会提示"×该类别已存在,请重新输入",因为在B1的下面是可以添加A1、A2...的,就是这个问题,请教各位朋友应该如何解决!谢谢!以下是我写的相关代码: /**
* 新增前验证药品类型的有效性
* @param mapping
* @param form
* @param request
* @param response
* @return
* @throws Exception
*/
public ActionForward checkName(ActionMapping mapping, ActionForm form,
HttpServletRequest request, HttpServletResponse response)
throws Exception {
String typename = request.getParameter("typeName");
String typename1 = new String(typename.getBytes("iso-8859-1"),"GBK");
DetachedCriteria dc = DetachedCriteria.forClass(DrugType.class);
dc.add(Restrictions.eq("typeName", typename1));
List list = drugTypeBiz.selAll(dc);
if (list.size() != 0) {
response.getWriter().print("a"); // 类别已存在
} else {
response.getWriter().print("b"); // 类别不存在
}
return null;
}<script language="JavaScript">
//一个初步的开发框架
var http_request = false;
//获取httpXMLHttpRequest对象
function getXHRequest()
{
//开始初始化XMLHttpRequest对象
if(window.XMLHttpRequest) { //Mozilla 浏览器
http_request = new XMLHttpRequest();
if (http_request.overrideMimeType) {//设置MiME类别
http_request.overrideMimeType("text/xml");
}
}
else if (window.ActiveXObject) { // IE浏览器
try {http_request = new ActiveXObject("Msxml2.XMLHTTP");}
catch (e)
{
try {http_request = new ActiveXObject("Microsoft.XMLHTTP");}catch (e) {}
}
}
if (!http_request) { // 异常,创建对象实例失败
window.alert("不能创建XMLHttpRequest对象实例.");
return false;
}
return true;
}
//验证类别名
var typenameFlag=false;
function checkTypename()
{
var typename=document.form1.typeName.value;
var typeMsn = document.getElementById("typeMsn");
if(typename==""||typename==" "||typename==null||typename==" "){
typeMsn.innerHTML="<font color='red'>×类别名不能为空</font>";
}else{
var url="<%=request.getContextPath()%>/drugTypeManage.do?method=checkName&typeName="+typename;
}
if(getXHRequest()){ //getXHRequest()获取httpXMLHttpRequest对象
http_request.onreadystatechange = cInfo;
http_request.open("GET",url, true);
http_request.setRequestHeader("If-Modified-Since","0");
http_request.send();
}
}
function cInfo()
{
if (http_request.readyState == 4) { // 判断对象状态
if (http_request.status == 200) { // 信息已经成功返回,开始处理信息
try {
str = http_request.responseText;
if(str=="a") {
typeMsn.innerHTML="<font color='red'>×该类别已存在,请重新输入</font>";
typenameFlag = "1";
}
else if("b") {
typeMsn.innerHTML="<font color='green'>√此类别名可以使用</font>";
typenameFlag = "2";
}
} catch(e) { }
}
}
}
function tosave(){
var typeName = document.getElementById('typeName').value;
var id = document.getElementById('idno').value;
var parentId = document.getElementById('parentidno').value;
if(typeName==null || typeName=="" || typeName==" "||typeName==" "){
alert("名称不能为空!");
document.getElementById('typeName').focus();
return;
}
if(typenameFlag==1){
alert("该类别名已被使用!");
return;
}
if(typenameFlag==2){
document.form1.action="<%=request.getContextPath()%>/drugTypeManage.do?method=addDrugInfo";
document.form1.submit();
}
}
</script>
这是表(select t.*, t.rowid from drugtype t for update ):
ID PARENTID TYPENAME
0 10 无分类
1 0 A
5 1 A1
6 1 A2
2 0 B
7 2 B1
8 2 B2
3 0 C
9 3 C1
10 3 C2
这么长的代码,dwr的话,也许不到三分之一就行了