doubleselect标签为sturt标签库里的双级联动下拉框,具体用法查看官方文档。
/**一级下拉框从List中选择enetity实体,
二级下拉框根据实体的enetity.cls属性选择对应的entity.attrList
封装如下**/
List<Entity> list = ruleSetHandler.getEntities(ruleSet);// your lists;
Map<String, List<Attribute>> map = new HashMap<String, List<Attribute>>();
if (list != null && !list.isEmpty() && list.size() > 0) {
for (Entity entity : list) {
map.put(entity.getCls(), entity.getAttrList());
}
}
//这是s标签的用法实现的二级联动。
<s:doubleselect id="entityName" name="entityName" list="#request.entities"
listKey="note"
listValue="note"
doubleList="#request.entitiesMap[top.cls]"
doubleId="attrName"
doubleName="attrName"
formName="form1"
headerKey=""
headerValue="%{getText('Please.select')}"
doubleHeaderKey=""
doubleHeaderValue="Please select"
doubleListKey = "attr"
doubleListValue="note"
/>
在实际项目中,常常面临项目升级、迁移、改造等,在不改动后端代码的情况下,将s标签的联动显示该为c标签的联动显示,代码如下
<script language="javascript"> $(function() { $("#entityName").change(function() { $("#attrName").empty(); //清空二级下拉框 $("#attrName").val("please choose"); var entityNameNote = $("#entityName").val(); // 一级菜单的值 var cls = $("#entityName").find("option:selected").attr("cls"); //console.log(entityNameNote+","+cls); <c:forEach var="item" items="${entitiesMap}"> //console.log("属性:" + "${item.key}" +"值:" + "${item.value}"); /* <c:forEach var="item1" items="${item.value}"> </c:forEach> */ if(cls=="${item.key}"){ <c:forEach var="item1" items="${item.value}"> $("#attrName").append("<option value='${item1.attr}'>${item1.note}</option>"); </c:forEach> } </c:forEach> }); }); </script>
<select id="entityName" name="entityName" > <option>———— 请选择 ————</option> <c:forEach var="item" items="${entities}"> <option value="${item.note}" cls="${item.cls}"><c:out value="${item.note}"/></option> </c:forEach> </select> <select id="attrName" name="attrName" > <option>———— 请选择 ————</option> </select>