首页 > 代码库 > JSTL根据后台传输list大小动态创建表格

JSTL根据后台传输list大小动态创建表格

最近,项目中需要写一个根据后台传入List类型对象的大小来动态创建表格,并在JSP页面中将信息显示出来,并且对于一些特殊信息颜色飘红表示。

首先看一下List对象存储的内容,这个项目需要检测系统中一些服务器的连接情况,每个应用可能关联多个服务器,服务器的数量不同,所以使用List来存储信息,List中的对象是一个长度为2的String数组。这个String数组的第一个位置存放需要检测服务器的ip:port,第二个位置存放是检测结果,结果又两种,连接成功!和连接失败!

例如下面一个String数组。

String[] strs = new String[2];
strs[0] = "192.12.112.87:6777";
strs[1] = "连接成功!";
这个strs对象就是一个list存储对象。

在action类中我们将最终检测结果放入request中,然后使用EL表达式取出相应的数据。

最重要的如何在JSP中动态的创建表格,这里,我们规定每一行显示三条数据,表格的行数需要根据list的大小来创建。

下面看一下JSP中的表现

<c:forEach  begin="1" end="${fn:length(message.checkstatus)/3+1}" step="1" varStatus="vs">
    <tr>
    	<c:forEach var="item" items="${message.checkstatus}" begin="${vs.count*3-3}" end="${vs.count*3-1}" step="1">
    	<span style="white-space:pre">	</span><c:choose>
    		<span style="white-space:pre">	</span><c:when test="${item[1]=='连接失败!'}">
    				<td class="red">${item[0]}</td>
    				<td class="red">${item[1]}</td>
    			</c:when>
    			<c:otherwise>
    				<td>${item[0]}</td>
    				<td>${item[1]}</td>
    			</c:otherwise>
    		</c:choose>
    	</c:forEach>
    </tr>
 </c:forEach>
首先在外层循环控制最终产生的行数,这里end中的表达式最终计算出来的是个浮点数,应该对他进行上取整,但是JSTL中没有提供相应的功能,这里简单的加1出来,如果结果是个整数在表格中可能会空出一行,如果需要修改可以字节写一个上取整方法。

内循环开始想相应的列中写入数据进行显示,使用<c:when>和<c:otherwise>标签进行判断,判断线上信息是否需要进行特殊标志。

对于测试数据我共写了四条进行验证,显示结果如下:


JSTL根据后台传输list大小动态创建表格