关于struts2两级联动的写法

            在开发的时候突然遇到需要写个二级联动,而正好我用的是struts2.0,于是就写了一个。废话不多说,直接上代码。

    首先,要在Controller中注册页面二级联动属性,写好get/set方法。在这里我拿 学科-章节-小节 来做练习。利用学科id来得到章节属性。

private List<Chapter> chapters;
private Map<Integer,List<Unit>> unitMap;
//省略get/set方法。。。。
public void loadDoubleSelect(){
      
       chapters = chapterService.findBySubject(subjectId);
       unitMap = new LinkedHashMap<Integer, List<Unit>>();
       if(chapters.size()>0){
           for(Chapter chapter:chapters){
	      List<Unit> units = unitService.findByChapter(chapter.getId());
	      unitMap.put(chapter.getId(), units);
	   }
        }
}

        其中chapters 是根据学科id获取该学科下的所有章节。unitMap是当前章节下所获取的小节集合,在这里利用键值对进行存贮。

       Controller配置完成,那么进入jsp页面,如上代码所示,在这里进行了数据的准备,那么在获取的时候必须用该Controller所写的属性。

<style> 
     .nobr br{display:none}   
       
</style>
<div>
	<s:form method="post" action="/exercise_showList" name="serchForm">
		<s:doubleselect list="chapters" listKey="id" listValue="title" formName="searchForm" headerKey="" headerValue="-请选择-"  name="chapterId" cssStyle="width:120px;"  
			doubleList="unitMap.get(top.id)" doubleName="unitId" doubleListKey="id" doubleListValue="title"   doubleCssStyle="width:120px;">
  		</s:doubleselect>
	</s:form>
</div>

    上文中这个style样式是因为什么呢?因为struts2.0中默认样式为两个下拉框在一列上,一上一下。该样式就是解决这个问题的。这样就能获取到Controller的数据。

     我来解释一下<s:doubleselect>中的属性。

tooltip指显示图标的显示文字
label 指生成组件前的标签文字
name 指第一个下拉框的表单name属性
list 指第一个下拉框的集合
listKey 指第一个下拉框的选项的键值 提交后天的值 --对应集合里单个对象里面的属性
listValue 指第一个下拉框中的选项显示值 --对应集合里单个对象里面的属
doubleList 指第二个下拉框要使用的集合
doubleName 指第二个下拉框的表单name属性
doubleListKey 指第二个下拉框中的选项中的键值 --对应集合里单个对象里面的属性
doubleListValue 指第二个下拉框中的选项显示值 --对应集合里单个对象里面的属性
在这里注意:formName则这里必须填写该form表单的name值,否则二级联动会失败。

    在这里效果图如下所示:

 

关于struts2两级联动的写法关于struts2两级联动的写法

你可能感兴趣的:(java,struts2,web开发,J2EE,二级联动)