夜之son 发表于 2013-1-29 12:12:45

s:doubleselect 标签

最近在项目中用到了一个需要联动的地方,我有很多个专业课。每个专业课有很多个知识点。现在我希望的是使用选择了一个专业课之后,对应的知识点在二级下拉框中也对应改变。这个实现如果使用ajax的话,可以实现。
我用的是SSH,struts2中有联动标签,不过这个标签好像并不是很好用。还是说说我的思路吧:我先查出一个专业所对应的专业课,然后根据专业课id来查出专业课所对应的知识点。然后显示在前台,保证专业课和知识点可以联动。
 
/* * 查找相应课程名所对应的知识点 * */public List<Knowl> findkno(int i) {// TODO Auto-generated method stubList<Knowl> list=new ArrayList<Knowl>();list=this.getHibernateTemplate().find("from Knowl as kn where kn.cname="+i);return list;}/* * 查找相应专业所对应的课程 */public List<Cname> findcno(String str) {// TODO Auto-generated method stubList<Cname> list=new ArrayList<Cname>();list=this.getHibernateTemplate().find("from Cname as cn where cn.spec=?", str);return list;}/* * 查找相应课程所对应的id */ public List<Integer> getcnid(String str) {// TODO Auto-generated method stubList<Integer> list = new ArrayList<Integer>();list=this.getHibernateTemplate().find("select cn.cnameId from Cname as cn where cn.cname=?",str);return list;} 
 用一个action来调用这些方法:
 
lk=new ArrayList<Knowl>(); ls=new ArrayList<Integer>();map=new HashMap();list=cdao.findcno("JAVA");//获得java专业所对应的专业课集合/* * 遍历课程名得到每一个课程的id * */for(int i=0;i<list.size();i++){String str=list.get(i).getCname();//获得各个专业课所对应的专业课名字 ls=cdao.getcnid(str);//获得每一个专业课的idfor(int z=0;z<ls.size();z++){int j=(int)ls.get(z);lk=cdao.findkno(j);//获得每一门专业课所对应的知识点map.put(j, lk);}}return "success"; 
 list是要交给前台显示的一级菜单。map是要显示的二级菜单.其中j为每个专业课所对应的id。
前台是这样显示的:
 
<s:doubleselect name="first" list="list" listKey="cname" listValue="cname" doubleName="second"doubleList="map.get(cnameId)" doubleListKey="knowl" doubleListValue="knowl" formName="suibian" theme="simple"></s:doubleselect> 网上有哥们这样做,doubleList="map.get(top.id)",我试过用,没能实现。map.get(cnameId)也能直接得到那个对象。 listKey="cname"也可一些成cnameId.
cname,cnameId都是对象Cname中的属性。就是专业课那张表的属性,knowl为知识点那个对象的一个属性。
而且formName="suibian" 也要跟表单的名字保持一致,不然也出不来。我按照这种方式实现了我的要求。
希望可以提供给需要的兄弟们一些启示,有高见的也请不吝赐教。
 
页: [1]
查看完整版本: s:doubleselect 标签