功能
在页面增加"名称"和"状态"两个搜索框,通过搜索条件来过滤tree的显示列表
原先的做法:
//通过在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,可以这么写:
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); } });
现在出现了新的问题:
因为项目中需要做多层树,树的结构为:首层为customer;第二层为customer下的用户列表;第三层为该用户下的问题列表,于是这么做:
$("#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){ //啥都不需要做 } }, });
上面的写法是通过当前节点的属性来判断,当前被操作的节点是一级,二级,还是三级节点,这么做之后产生了一个很奇怪的问题:
我们知道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){...}...
struts2接受的easyui的tree的搜索框的乱码问题
原文:http://my.oschina.net/u/2331760/blog/526533