功能java
在页面增长"名称"和"状态"两个搜索框,经过搜索条件来过滤tree的显示列表node
原先的作法:ajax
//经过在tree的url中添加请求参数,而后在Action接受请求参数并过滤结果集 $('#tree').tree('options').url ='./iface/findCustomerTree?customerName='+searchValue+"&object.state="+$('#questionState').combobox('getValue'); $('#tree').tree('reload');
这么作的话:由于名称可能会是中文,这样直接附加在请求url中,struts2的过滤器不会对GET请求起做用.因此可能会出现乱码服务器
改正后的写法:框架
//经过添加请求参数,把请求参数封装成一个object对象,这种写法是POST请求,POST请求会被struts2的filter拦截 $('#tree').tree('options').url = './iface/findCustomerTree'; $('#tree').tree('load',{"customerName":searchValue,"object.state":$('#questionState').combobox('getValue')});
若是是datagrid,能够这么写:post
var data = {}; data["customerName"] = searchValue; data["object.state"] = $('#questionState').combobox('getValue'); $.ajax({ url:'./iface/findCustomerTree', data:data, type:'post', success:function(data){ console.info(data); $('#tree').tree('loadData',data); } });
如今出现了新的问题:ui
由于项目中须要作多层树,树的结构为:首层为customer;第二层为customer下的用户列表;第三层为该用户下的问题列表,因而这么作:url
$("#tree").tree({ onBeforeExpand:function(node){ if(node.attributes && node.attributes.customerId){ $('#tree').tree('options').url = "./iface/findUserTree?customerId=" + node.id+"&object.state="+$('#questionState').combobox('getValue'); //若是attributes存在属性user,则表示展开的是用户user,那么须要查找的是该user下面的userfeedback提交的问题 }else if(node.attributes && node.attributes.userId){ $('#tree').tree('options').url = "./iface/findUserQuestions?loginId=" + node.id+"&object.state="+$('#questionState').combobox('getValue'); //若是存在url属性,则表示右侧的tab页将要被填充(此时树节点为最末级的叶子节点,已是open) }else if(node.attributes && node.attributes.url){ //啥都不须要作 } }, });
上面的写法是经过当前节点的属性来判断,当前被操做的节点是一级,二级,仍是三级节点,这么作以后产生了一个很奇怪的问题:
code
咱们知道tree节点被展开的时候,会自动向服务器发送一个id的请求参数,这个是easyui的tree框架自动作的事情,而咱们在展开一级和二级节点的时候,在tree的请求url后面添加了请求参数,在JS中能够看到该请求其实是POST请求,可是url中的请求参数也可以被sturts2获取到.注意:***而若是在这以前,tree执行了tree('load',queryParams),那么就会在tree的options属性中把这queryParams对象中的内容添加到options中,而后再展开树的时候,该请求参数queryParams会做为tree的一个属性构成,即此时请求URL中附加了请求参数(经过?在请求后面加的参数),而后在POST请求中的内容FromData:id和queryParams,如图:对象
这种方式的请求Action接受不到...我不知道是什么缘由,后面只有把请求参数queryParams这个对象清空,即在onBeforeExpand方法中直接写上了:$('#tree').tree('options').queryParams = {};,接下来的代码和上面的同样:
$('#tree').tree('options').queryParams = {}; if(node.attributes && node.attributes.customerId){...}...