Jquery+Struts的<selected>二级联动

来源:互联网 发布:网络机柜安装规范 编辑:程序博客网 时间:2024/06/05 03:55

1.问题分析

多级select联动是网页选取多级项目必要的应用方法,一般情况下都是由一级select的选择项动态异步的修改二级select的option内容。为了方便添加内容与后台数据一致性,一般很少采用如博客点击打开链接中所展示的静态标签联动形式。

2.解决策略

整个联动流程如图所示:

1.监听一级select的change事件,并获得用于修改二级select的关键属性

2.在change事件中通过ajax向struts后台发送数据请求,并返回Json形式的数据

3.在ajax的success回调中向二级select添加需要的内容

3.代码说明

web端实现代码(负责一级select的change事件监听与二级select的数据请求、option添加)

$("#Devicetype").change(function(){   var customUrl = "TruevalueInspectionQuery!execute"+$("#Devicetype").val()+"Inspection.action";  $.ajax({url : customUrl,此处的通过ActionName!methodName.action的url形式调用自定义action执行方法,减少后台执行数据查询的action个数type : "post",dataType : "text",success : function(data) {  obj= $.parseJSON(data)//若返回的是json类型数据而不执行此句,会报"Type error invalid 'in' opreand a"的错误  $("#Inspection option").remove();//<span style="font-family: Arial, Helvetica, sans-serif;">Inspection </span><span style="font-family: Arial, Helvetica, sans-serif;">为要绑定的select,先清除数据  </span>          $.each(obj, function (i,item) //Jquery中第一个参数i为索引,第二个参数才是从obj中解析的item,因此第一个参数在回调时不可省略不写          {              $("#Inspection").append("<option value=" + item.tag + ">" + item.name + "</option>");//tag与name为回传jsonobject的属性值            });  },error : function() {alert("网络异常请稍后再试...")}});//end ajax});//end change

后台action方法(负责数据请求和Json化回传)

/** * 用于返回检定项目的检定项的action * <p>该action无默认excute方法,在使用时需要指定具体执行的自定义方法 * @author cyoubo */public class Ac_TruevalueInspectionQuery extends ActionSupport{private static final long serialVersionUID = 7545375058031908844L;//定义要返回的Json结果,json话过程交由Strut框架自行完成List<InspectionItem> resultJson;//getter与setterpublic List<InspectionItem> getResultJson(){return resultJson;}public void setResultJson(List<InspectionItem> resultJson){this.resultJson = resultJson;}//延迟构造,避免数据冲突public void prepareresultJson(){if(resultJson==null)resultJson=new ArrayList<InspectionItem>();resultJson.clear();}public String executeHDMIInspection(){prepareresultJson();resultJson.add(new InspectionItem("Consitency", "一致性", ""));return SUCCESS;}public String executeEDMIInspection(){prepareresultJson();resultJson.add(new InspectionItem("Consisten", "一致性", ""));resultJson.add(new InspectionItem("Spotposition", "光相位", ""));return SUCCESS;}}
注意在strut.xml配置文件中,将该action配置为返回json的action

<package name="JsonPackage" extends="json-default"><action name="Truevaluescan" class="com.dr.truevalue.action.Ac_<span style="font-family: Arial, Helvetica, sans-serif;">Ac_TruevalueInspectionQuery</span><span style="font-family: Arial, Helvetica, sans-serif;">"></span><span style="white-space:pre"></span><result type="json"><!-- 这里指定将被Struts2序列化的属性,该属性在action中必须有对应的getter方法 --><param name="root">resultJson</param></result></action></package>




0 0
原创粉丝点击