两个list
request.setAttribute("la",listA);
request.setAttribute("lb",listB);la里对象的数量肯定是<=lb内的对象的数量。
la内的对象肯定都是lb内的对象,只不过la内有的时候数量少,有的时候可能等于lb内的数量。那么这时,我要在页面上logic:iterate。打印出所有lb内的所有对象,并且在打印的同时,让la内的对象一个一个的跟lb内的对象比较。
如果la内的对象等于lb内的对象,那么lb打印出来的对象后边的checkbox打勾。麻烦大家了,比较的时候我不清除,好像logic有个比较的方法。具体应该怎样写呢?谁能写下?

解决方案 »

  1.   

    如果你的a这个list除了对比以外没有其他用处,那么就不应该这么设计,应该在action里面就比较好,给每个b中的对象增加是否选中CheckBox的标记。JSP只负责显示,这才是好的MVC实现
      

  2.   

    同意楼上  一般页面最好不要实现这些功能,action实现就行了,页面只循环显示
      

  3.   

    呵呵,听我道来,其实这里很麻烦的。
    因为我们的开发需要,所以要这样做。首先,listA里边放的是用户选择的结果集。listB内放置的总的结果集(举个例子,有listB放的是香蕉,苹果,哈密瓜,葡萄,西瓜)。客户可以选择多个,也可以不选,也可以全选。现在我要实现的功能就是可以让用户修改他们的选择,也就是他们修改时,他们选择过的都打钩(checkbox),然后他们可以重新选择。so,我就得这样做。上边只是我举的例子。实际数据库内各字段存的是对象,很麻烦。
    麻烦大家帮忙了
      

  4.   

    可以使用嵌套遍历,也就是说先遍历lb,然后在循环里面遍历la,然后在la里面用equal标签比较,如果相等则打钩,否则什么都不做就行了.
      

  5.   

    把la和lb的数据全部给javascript的数组.
    然后用javascript控制循环把lb的数据全部生成出来。
    最后循环la把,把页面中和la相等的行的checkbox打勾。
    这样应该比较快,页面显示交给javascript.
      

  6.   

    有一个方法可以实现,不过可能会有效率问题
    就是用jstl
    你先迭代lb,再在lb里的一列里迭代la
    例如:
     <c:set var="lbid" value="${requestScope.list.lbid}"/>
                <td>
                 <c:forEach var="list" items="la"> 
                  <c:if test="${la.laid == lbid}">
                     checkbox    
                                </c:if>
       </c:forEach>
        </td>
    随手写的,不一定可以,不过方法应该是这样
      

  7.   

    同意用javascript的方法.
    标签处理集合太麻烦,用javascript吧,给你一段代码:<script>
    var k = {"77":"0", "88":"1", "99":"2"};
    if("77" in k){
    alert(1);
    }
    </script>
      

  8.   

    不走服务器,那就javascript吧,同意楼上地。
      

  9.   

    随手给你写了一个例子:<%@ page language="java" contentType="text/html; charset=GBK"
        pageEncoding="GBK"%>
    <%@ 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-logic" prefix="logic" %>
    <%@ page import="java.util.*" %><%
    //初始化数据(实际是你action做的)
    List list = new ArrayList(); 
    list.add("香蕉");
    list.add("苹果");
    list.add("哈密瓜");
    list.add("葡萄");
    list.add("西瓜");
    request.setAttribute("la",list);list = new ArrayList();
    list.add("苹果");
    list.add("葡萄");
    list.add("西瓜");
    request.setAttribute("lb",list);
    %>
    <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
    <html>
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=GBK">
    <title>Insert title here</title><script type="text/javascript">
    var listdata = new Array();
    <logic:iterate id="rowobj" name="lb">
    listdata["<bean:write name="rowobj"/>"] = true;
    </logic:iterate>
    </script>
    </head>
    <body>
    <table>
    <logic:iterate id="rowobj" name="la" indexId="rowNum">
    <tr>
    <td><input type="checkbox" name="checkbox<bean:write name="rowNum"/>" value="checkbox"></tr>
    <td><bean:write name="rowobj"/></td>
    <script type="text/javascript">
    if("<bean:write name="rowobj"/>" in listdata)
    document.getElementById("checkbox<bean:write name="rowNum"/>").checked = true;
    </script>
    </tr>
    </logic:iterate>
    </table>
    </body>
    </html>