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){...}...
相關文章
相關標籤/搜索