Java 如何将一个ArrayList拆分并显示为多个表列

Java 如何将一个ArrayList拆分并显示为多个表列,java,jquery,jsp,servlets,displaytag,Java,Jquery,Jsp,Servlets,Displaytag,我有一个servlet,它加载一个属性文件,并在ArrayList对象中包含100个测试用例名称的列表。加载servlet后,将其转发到JSP,JSP在表中显示列表。这个列表很长,所以我想用一种优雅的方式将它显示在一个表中,这样它就可以在JSP上分成三列或四列 我现在要做的是在servlet中将列表分成三个子列表: //load properties Properties props = new Properties(); ArrayList<String> test

我有一个servlet,它加载一个属性文件,并在ArrayList对象中包含100个测试用例名称的列表。加载servlet后,将其转发到JSP,JSP在表中显示列表。这个列表很长,所以我想用一种优雅的方式将它显示在一个表中,这样它就可以在JSP上分成三列或四列

我现在要做的是在servlet中将列表分成三个子列表:

//load properties
Properties props = new Properties();
        ArrayList<String> tests = new ArrayList<String>();
        props.load(getServletContext().getResourceAsStream("/WEB-INF/sailcertifier.properties"));
        Pattern pattern = Pattern.compile("[A-Z]{3}-[0-9]{2}");     
        for (Enumeration<Object> e = props.keys(); e.hasMoreElements();) {
            String key = (String) e.nextElement();
            Matcher m = pattern.matcher(key);
            if (m.find())
                tests.add(key);
        }
        Collections.sort(tests, new TestOrderComparator());
        confBean.setPossibleTests(tests.toArray(new String[tests.size()]));
        int third = tests.size() / 3;
        List<String> testSubset1 = tests.subList(0, third);
        List<String> testSubset2 = tests.subList(third, third * 2);
        List<String> testSubset3 = tests.subList(third * 2, tests.size());
        //store the bean as a request attribute
        request.setAttribute("testSet1", testSubset1.toArray(new String[testSubset1.size()]));
        request.setAttribute("testSet2", testSubset2.toArray(new String[testSubset2.size()]));
        request.setAttribute("testSet3", testSubset3.toArray(new String[testSubset3.size()]));
        request.setAttribute("testsConf", confBean);
        request.setAttribute("certProps", props);
        //forward to tests selection page
        String url = "/sailcertifier/jsp/testsSelection.jsp";
        RequestDispatcher dispatcher = getServletContext().getRequestDispatcher(url);
        response.setContentType("application/javascript");
        try {
            dispatcher.forward(request, response);
        } catch (ServletException e) {
            e.printStackTrace();
        }
//加载属性
Properties props=新属性();
ArrayList tests=新的ArrayList();
load(getServletContext().getResourceAsStream(“/WEB-INF/sailcertifier.properties”);
Pattern=Pattern.compile(“[A-Z]{3}-[0-9]{2}”);
对于(枚举e=props.keys();e.hasMoreElements();){
字符串键=(字符串)e.nextElement();
匹配器m=模式匹配器(键);
if(m.find())
测试。添加(键);
}
sort(tests,newtestordercomparator());
setPossibleTests(tests.toArray(新字符串[tests.size()]);
int third=tests.size()/3;
List testSubset1=tests.subList(0,第三个);
List testSubset2=tests.subList(第三,第三*2);
List testSubset3=tests.subList(第三个*2,tests.size());
//将bean存储为请求属性
request.setAttribute(“testSet1”,testSubset1.toArray(新字符串[testSubset1.size()]);
request.setAttribute(“testSet2”,testSubset2.toArray(新字符串[testSubset2.size()]);
request.setAttribute(“testSet3”,testSubset3.toArray(新字符串[testSubset3.size()]);
setAttribute(“testsConf”,confBean);
setAttribute(“certProps”,props);
//转发到测试选择页面
字符串url=“/sailcertifier/jsp/testsSelection.jsp”;
RequestDispatcher=getServletContext().getRequestDispatcher(url);
setContentType(“应用程序/javascript”);
试一试{
转发(请求、响应);
}捕获(ServletException e){
e、 printStackTrace();
}
在JSP中,我像这样遍历子列表(为每种情况添加一些html元素):


${testName}
${testName}
${testName}
我承认对循环使用三个JSTL有点难看(还没有弄清楚如何使用完整的原始列表)。有没有更干净的方法来处理这个问题,通过使用一些jquery插件(比如)或其他库(?)来为我均匀地处理拆分成行的问题?

打印一个
,然后循环数组列表,然后在
中打印每个项目,并每隔n个项目打印一个
,然后结束数组列表上的循环,最后打印一个

例如,每第三项增加一行:


${item}

返回当前迭代轮的索引。
%3
如果被3除而不带余数,则只返回
0
(因此,当索引为0、3、6、9、12等时)。

我不确定我是否理解了您的请求,但假设您有100个元素的数组,并且希望有3列显示它们,那么您可以利用“float”属性来实现这一点: 只需按所需的宽度进行div,并在数组上迭代,使内部div的宽度为/3:

     <div style="width:600px;margin:auto;">
          <c:forEach var="testName" items="${testSet}">
              <div style="float:left;width:200px;">whatever you want to do with ${testName}</div>
          </c:forEach>
     </div>

无论您想用${testName}做什么
     <div style="width:600px;margin:auto;">
          <c:forEach var="testName" items="${testSet}">
              <div style="float:left;width:200px;">whatever you want to do with ${testName}</div>
          </c:forEach>
     </div>