分頁的時候,checkbox選中問題
很多人都遇到類似的問題,比如第一頁選中一個,第二頁選中一個,然后把兩頁選中的兩個都挑選出來,而且從第二頁返回第一頁的時候,第一頁選中的那個數據還是選中狀態
1.Action所做的處理
Map<Integer,String[]> map = (Map)request.getSession().getAttribute("map");
if(collectFile!=null && collectFile.length>0){
if(map==null){
//第一次進入列表頁面
map = new HashMap<Integer,String[]>();
map.put(currentPage, collectFile);
}else{
if(!map.containsKey(currentPage)){
map.put(currentPage, collectFile);
}else{
map.remove(currentPage);
map.put(currentPage, collectFile);
}
}
request.getSession().setAttribute("map", map);
}
if(map!=null){
List list = new ArrayList();
Iterator iter = map.entrySet().iterator();
while(iter.hasNext()){
Map.Entry<Integer, String[]> entry = (Entry<Integer, String[]>) iter.next();
String[] str = entry.getValue();
for (int i = 0; i < str.length; i++) {
list.add(this.trans(str[i]));
}
}
request.setAttribute("selectedFiles",list);
}
原理就是這樣:1.把所有的數據放在一個map里,map(第幾頁,選中的數據);
2.當跳到當前頁面的時候,比如從第一頁跳到第二頁的時候,這時候就要保存第一頁選中的數據,這時需要做的是先把以前第一頁的那個map移除,然后添加新的map(第一頁,選中的數據)
3.遍歷map,把map里的所有頁的數據遍歷出來,保存到一個list里(為什么這樣做,是為了便於下面jsp里的動作);
2.jsp所做的處理,寫一個function
function initPage(){
var inputs = document.getElementsByTagName("input");
<%
List<String> selectedFiles = (List)request.getAttribute("selectedFiles");
if(selectedFiles!=null){
for(int i=0;i<selectedFiles.size();i++){
%>
for(var j= 0;j<inputs.length;j++){
var input = inputs[j];
if(input.type=="checkbox"){
if(input.value=="<%=(String)selectedFiles.get(i)%>"){
input.checked = true;
}
}
}
<%}}%>
}
原理:jsp所做的就是遍歷所有的checkbox,然后取到checkbox的value,然后遍歷從Action傳過來的list,將兩者的值進行比較,如果相同,那么checkbox.checked=true;
注意這個function應該是頁面剛進入的時候進行的動作,所以body load的時候所調用的方法,或者setTimeout("initPage()",50);這樣處理也行
詳情查看總站項目Action:DataCollectAction jsp:listFile.jsp