功能
在页面增加"名称"和"状态"两个搜索框,通过搜索条件来过滤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