struts2接受的easyui的tree的搜索框的乱码问题

功能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){...}...
相关文章
相关标签/搜索