情景:在資源調度中,首先用戶需要選擇工作目標,然后跟據選擇的工作目標不同而選擇不同的賬號和代理ip。處理過程如下:點擊選擇賬號,在js中獲取工作目標對工作目標進行兩次編碼(encodeURI(encodeURI(gzmb))),在后台,對工作目標進行解碼,然后構建URL。
如下:
1 String gzmb = URLDecoder.decode(request.getParameter("gzmb"), "UTF-8"); 2 Stringurl = "/wlzh/queryPageList.action?accountO.zt=1&accountO.gzmb="+gzmbJiami+"&accountO.accountIsYx=1";
如圖

可知解碼是成功的。但是最后得到的結果卻是將所有的賬號全部選擇出來,並沒有選擇對應工作目標的賬號。查看后台。URL跳轉得到的工作目標值如下所示的:

在這里我立馬想到URL中文亂碼,於是我在后台進行解碼操作。但是不知道為什么,換了幾種辦法都不可以。在這里我想到了以前的辦法,通過js兩次編碼,重構URL。所以在后台我將工作目標傳遞出來,然后通過js兩次編碼,重新構建URL。做到這里時我發現,這不就是一開始的么?既然這樣,第一步為什么需要解碼呢,直接傳遞過來不就可以了么?將第一步的解碼去掉,還真的可以。在進行測試,ie7以上的、火狐、谷歌,唯獨ie6不可以(這個原因不知道為什么?求解釋)。在這里我只能想到一種解決辦法了,使用form表單來進行處理。雖然可以成功,但是這是萬不得已的辦法。
“有些東西只要你放在心上,過段時間后你一定可以想到一種解決辦法”。下班后在車上突然想到了一種另類的辦法—在后台對工作目標進行加密操作,賦值給url,然后在另外一邊進行解密操作不就可以了。如下
1 //構建賬號選擇條件 2 3 String gzmb= URLDecoder.decode(request.getParameter("gzmb") == null ? "" : request.getParameter("gzmb"), "utf-8"); 4 String gzmbJiami = DecodeUtils.getJiamiData(gzmb); 5 Stringurl = "/wlzh/queryPageList.action?accountO.zt=1&accountO.gzmb="+gzmbJiami+"&accountO.accountIsYx=1";
URL如下所示:

在那邊進行解密操作
1 String gzmbJiemi = DecodeUtils.getJiemiData(accountO.getGzmb()); 2 accountO.setGzmb(gzmbJiemi); 3 PageResultInfo<Account_Bean>pageResultInfo = service.queryAccountPageResultBy(accountO , pageInfo,user);
得到gzmb值如下所示

注:DecodeUtils是一個功能非常強大的加密解密的工具類。
這里所提供的並不是什么高深的技術,只是提供一種另類的解決方法。這個事情告訴了我,沒有做不到的事情,只有想不到的辦法。
