字典传值传统实现

来源:互联网 发布:数据库置疑的原因 编辑:程序博客网 时间:2024/05/16 09:48

   在以前的项目中所认知的字典联动传值都是点击AJAX二次请求,或者是DWR的,今天为了减少一次请求,特地来了来了个一次传值。于是开始了折腾之路。

                字典A是select项目 类型,字典B是项目类型子项,A改变,B也跟着相应的改变,前面值变化影响后面,这是项目中应用非常非常多的场景。

我首先写了后台sql,DB2数据库,

select a.id,a.TITLE,a.name,ROW_NUMBER() OVER(PARTITION BY a.id  ORDER BY  a.TINDEX) as index   from (select ss.id,ss.TITLE,sl.name, sl.TINDEX from table1  ss
left join 
table2  sl on 
ss.id=sl.PARAMID
where 
sl.ISDEL='0' and (ss.id='11' or ss.id='12' or ss.id='13')
and  sl.STATUS='1' )a  ;


数据如下:

ID   TITLE           NAME      INDEX
11 项目培训全行     1
11 项目培训本单位     2
11 项目培训单位    3
11 项目培训行外机构   4
12 实习培训新入职     1
12 实习培训跨组別     2
12 实习培训跨单位     3


很普通的sql,此处用了开窗函数,呵呵。数据的展示看起来还不错,然后我就直接传了list到页面了,原生的java list,未做任何处理放到request域中,这也是折腾的开始:
  到了页面之后,我开始各种绞净脑汁的想办法处理这一坨值 ,从request中取出来放到js里,放到页面中,各种符号不对,格式不对,靠,差点让人放弃了。痛苦,最后代码形成如下
//初始化select的值 
<span >項目類型</span>
<select  onchange="projectchange(this);"id="projecttypes"  >
 <%
int i=0;
for(Map<String, Object> item :list){   //list的增强for循环,开始是用普通for的,发现不行
if(i>0){
String  a=list.get(i).get("ID").toString();
String  b=list.get(i-1).get("ID").toString();
if(!a.equals(b)){       //在这里去重
%>   
<option value="<%=list.get(i).get("ID") %>"><%=list.get(i).get("TITLE") %></option>
 <%
}
}else{
%>
<option value="<%=list.get(0).get("ID") %>"><%=list.get(0).get("TITLE") %></option>
 <%
}
i++;
 }%>
</select>
   下面是折腾的重点来了! onchange触发事件

  function projectchange(t){
 $("#projecttypesunit").empty();
 <%int v=0;
 List<Map<String,Object>> list =(List<Map<String,Object>>)request.getAttribute("listtypes");
    for(Map<String, Object> item :list){
String  a=list.get(v).get("ID").toString();     //拿到标识的ID
   %>   
   var b="<%=list.get(v).get("NAME") %>";    //用变量b保存NAME,此处b折腾了好久 
      if($(t).find(":selected").val()=="11"){   //項目培训
      <%if(a.equals("11")){%>   
      $("#projecttypesunit").append("<option value="+<%=list.get(v).get("INDEX")%>+">"+b+"</option>");
          <%}%>
  }else if(...) {//下面还有12,13,代码一样的
                     }  
<%v++;} %>
   } 

整篇都是java代码跟js代码杂交在一起,看得人痛苦!我改了半天,在append后面的符号上报错都搞了好久,后来实在不行用变量b代替了 ,此处list也给了页面中的增强for使用了。结束了测试完美实现。 看来还是应该转成json传过来的,代码就会美观一点。

          效果是实现了但是感觉非常不可取,如果不是因为这个项目限制,我应该可以使用其它更好的方法。

0 0
原创粉丝点击