Action:
public class JavaScriptArrayAction extends DispatchAction{ public ActionForward search(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) { HttpSession session = request.getSession(true); JavaScriptArrayForm javaScriptArrayForm = (JavaScriptArrayForm)form; List<String> data = (List<String>)session.getAttribute("data"); int current = javaScriptArrayForm.getCurrent() - 1; if(current > -1 && current < 10){ List<String> l = data.subList(current++ * 10,current * 10); javaScriptArrayForm.setData(l); String allJSON = javaScriptArrayForm.getAllJSON().trim(); List<String> names = new ArrayList<String>(l.size()); if(null != allJSON && allJSON.length() > 0){ List<String> allList = Arrays.asList(allJSON.substring(1,allJSON.length() - 1).split(",")); for(int i = 0; i < l.size(); i++){ names.add(i,allList.contains(l.get(i)) ? l.get(i) : ""); } javaScriptArrayForm.setCurJSON(listToJSON(names)); }else{ javaScriptArrayForm.setAllJSON("[]"); javaScriptArrayForm.setCurJSON("[]"); } String[] ss = new String[names.size()]; names.toArray(ss); javaScriptArrayForm.setName(ss); } return mapping.getInputForward(); } @Override protected ActionForward unspecified(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) throws Exception { HttpSession session = request.getSession(true); JavaScriptArrayForm javaScriptArrayForm = (JavaScriptArrayForm)form; Random rand = new Random(); Set<String> set = new HashSet<String>(); do{ set.add(Integer.toString(rand.nextInt())); }while(set.size() <= 100); List<String> data = new ArrayList<String>(); data.addAll(set); session.setAttribute("data",data); javaScriptArrayForm.setCurrent(1); return search(mapping,javaScriptArrayForm,request,response); } public String listToJSON(List<String> array) { Iterator<String> i = array.iterator(); if(!i.hasNext()) return "[]"; StringBuilder sb = new StringBuilder(); sb.append('['); for(;;){ String e = i.next(); if(e.length() == 0){ if(!i.hasNext()){ if(sb.indexOf(", ",sb.length() - 2) == -1){ return sb.append(']').toString(); }else{ return sb.replace(sb.length() - 2,sb.length(),"]").toString(); } }else continue; } sb.append(e); if(!i.hasNext()){ if(sb.indexOf(", ",sb.length() - 2) == -1){ return sb.append(']').toString(); }else{ return sb.replace(sb.length() - 2,sb.length(),"]").toString(); } } sb.append(", "); } } }
form:
public class JavaScriptArrayForm extends ActionForm{ private String allJSON = "";//JS数组[所有页选中的] private String curJSON = "";//JS数组[当前页选中的] private String[] name;//当前页选中的值 private List<String> data = new ArrayList<String>();//当前页所有的值 private int current = 0; 。。。。。。 }
JSP:
<%@ page language="java" pageEncoding="UTF-8"%> <%@ taglib uri="http://struts.apache.org/tags-bean" prefix="bean"%> <%@ taglib uri="http://struts.apache.org/tags-html" prefix="html"%> <%@ taglib uri="http://struts.apache.org/tags-nested" prefix="nested"%> <html> <head> <title>JSP for JavaScriptArrayForm form</title> <script src="http://ajax.googleapis.com/ajax/libs/jquery/1.4/jquery.min.js"></script> <script type="text/javascript"> var v_all = trim(<bean:write name="javaScriptArrayForm" property="allJSON"/>); var v_cur = trim(<bean:write name="javaScriptArrayForm" property="curJSON"/>); function doSearch(page){ var val = document.forms[0].elements['current'].value + page; document.forms[0].elements['current'].value = eval("("+ val +")"); if(v_cur.length==0){ $(':checkbox[name=name][checked]').each(function(){ v_all.push(this.value); }); }else{ $(':checkbox[name=name][checked]').each(function(index,ele){ if(!contains(v_cur,ele.value)){ v_all.push(this.value);//添加本次新选择的项 } }); v_cur = trim(v_cur); if(v_cur.length>0){ //删除本次取消的项 for(var i=0;i< v_cur.length; i++){ contains(v_all,v_cur[i]); } } } $(':hidden[name=allJSON]').val("["+trim(v_all).join(",")+"]"); $("form[name='javaScriptArrayForm']").submit(); } //去除空白的元素 function trim(a){ if(a.length > 0){ a = a.sort(); while(a[0]=="") a.shift(); } return a; } function contains(a,o){ for(var i=0; i < a.length; i++){ if(a[i]==o){ a[i]=""; return true; } } return false; } </script> </head> <body> <html:form action="/jsArray"> <html:hidden property="allJSON"/> <html:hidden property="method" value="search"/> <nested:iterate property="data" indexId="index"> <html:multibox property="name"><nested:write/></html:multibox><nested:write/><br/> </nested:iterate> <a href="javascript:void(0)" onclick="doSearch('-1')">prev</a> <html:text property="current" style="width:12px;"/> <a href="javascript:void(0)" onclick="doSearch('+1')">next</a> </html:form> </body> </html>