四、下拉框数据获取方法的源代码
public String findOptions() throws Exception{
String entityName = getRequest().getParameter("_ENTITY");
String keyField = getRequest().getParameter("_KEY");
String descField = getRequest().getParameter("_DESC");
String orderBy = getRequest().getParameter("_ORDER_BY");
StringBuffer sb = new StringBuffer("");
sb.append("from " + entityName);
Map paramMap = RequestUtil.getParameterMap(getRequest(), "_CHAIN_PARAM_");
if(paramMap.keySet().size() > 0){
int paramCount = paramMap.keySet().size();
int count = 0;
for(Iterator it=paramMap.keySet().iterator();it.hasNext();){
count++;
if(count == 1){
sb.append(" where ");
}else{
sb.append(" and ");
}
String key = (String)it.next();
String value = String.valueOf(paramMap.get(key));
if(CommonUtil.isEmpty(value) || value.equals("null")){
sb.append(key.replaceFirst("_CHAIN_PARAM_", "") + " is null ");
}else{
sb.append(key.replaceFirst("_CHAIN_PARAM_", "") + "='" + value + "' ");
}
}
}
if(CommonUtil.isNotEmpty(orderBy)){
sb.append(" order by " + orderBy);
}
System.out.println(sb.toString());
List optionsList = getBaseService().find(sb.toString());
getValueStack().set("optionsList", optionsList);
getValueStack().set("keyField", keyField);
getValueStack().set("descField", descField);
return SUCCESS;
}
五、JS源代码
//下拉框联动选择事件 var chainSelectEvents = new Array(); function addInitChainSelectEvent(e){ chainSelectEvents[chainSelectEvents.length] = e; } window.onload = function(){ for(var i=0; i<chainSelectEvents.length; i++){ eval(chainSelectEvents[i]); } } function chainSelect(selectName, paramStr){ var objSelect = document.all[selectName]; if(objSelect == null) return; var entityName = objSelect.entityName; var keyField = objSelect.keyField; var descField = objSelect.descField; var orderBy = objSelect.orderBy; var childSelectName = objSelect.childSelectName; var currentValue = objSelect.currentValue; var allowEmpty = objSelect.allowEmpty; //构造URL var url = "findOptions.action?_ENTITY=" + entityName + "&_KEY=" + keyField + "&_DESC=" + descField; if(orderBy != null && orderBy.length > 0) url += "&_ORDER_BY=" + orderBy; if(paramStr != null && paramStr.length > 0) url += "&" + paramStr; //Ajax jQuery.get(url, function(data){ jQuery("select[name=" + selectName + "]").empty(); var initIndex = 0; if(allowEmpty == "true"){ initIndex = 1; jQuery("select[name=" + selectName + "]").append("<option value=''></option>"); } var xmlObject = new ActiveXObject("MSXML.DOMDocument"); xmlObject.async = false; xmlObject.loadXML(data); //fill data into select var selectedIndex = 0; jQuery(xmlObject).find("option").each(function(i, n){ var key = jQuery(n).attr("key"); var desc = jQuery(n).attr("description"); objSelect.options[i+initIndex] = new Option(desc, key); if(key == currentValue) selectedIndex = i+initIndex; }); objSelect.options[selectedIndex].selected = true; //chain child select if(childSelectName != null && childSelectName.length > 0){ bindChangeFunction(selectName, childSelectName); } }); } //绑定onChange事件 function bindChangeFunction(selectName, childSelectName){ jQuery("select[name=" + selectName + "]").bind("change", function(){ var parentKey = jQuery("select[name=" + selectName + "]:first").val(); var params = jQuery("select[name=" + childSelectName + "]:first").attr("params"); var pStr = params.replace("#PARENT_KEY#", parentKey); chainSelect(childSelectName, pStr); }); jQuery("select[name=" + selectName + "]").trigger("change"); }
六、下拉框数据模板源代码
<?xml version="1.0" encoding="UTF-8"?> <options> <#list optionsList as item> <#assign key = "item.${keyField}"> <#assign desc = "item.${descField}"> <option key="${key?eval}" description="${desc?eval}"/> </#list> </options>