我用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

解决方案 »

  1.   

    你的父级ID怎么设置的比如 A1是属于A的那么判断应该是select count(id) from table where name = A1 and 父级ID=A当你判断在B的时候应该是select count(id) from table where name = A1 and 父级ID=B
      

  2.   

    这张表的ID是自动增长的,当新增一条数据时,ID是自动增长,然后插入到数据库(我用的是ORACLE10g数据库)
      

  3.   

    这个和主键ID没关系吧,有个sortId 自身的ID(非记录ID),parentId(父ID)
      

  4.   

    关键是这个ID是自动增长的,那么这个ID具体应该怎么来进行判断呢?
      

  5.   

    感觉ajax还不如用它的dwr框架。
    这么长的代码,dwr的话,也许不到三分之一就行了