片段1:   <%
String[] work = new String[24];
for (int i = 0; i < 24; i++) {
if (work[i].equals("1")) {
%>
<td align="center" bgcolor="#009900">&nbsp;</td>
<%
} else {
%>
<td align="center" bgcolor="#E8E8E8">&nbsp;</td>
<%
}
}
%>片段2:<%
for(int i=0; i<4; i++){
out.println("<tr higth=\"20\">");
}
%>
片段3:<%
List list2 = (List)request.getAttribute("list2");
if (list2 != null && list2.size() != 0) {
int i = 0;
for (Iterator iter = list2.iterator(); iter.hasNext();) {
sp = (SecondPage) iter.next();//SecondPage是一个javabean
i++;
out.println("<tr>");
out.println("<td>" + sp.getLicense() + "</td>");
out.println("<td>" + sp.getGps_begin() + "</td>");
out.println("<td>" + sp.getGps_end() + "</td>");
out.println("</tr>");
}
for (int j = i; j < 4; j++) {
out.println("<tr");
out.println("<td>&nbsp;</td>");
out.println("<td>&nbsp;</td>");
out.println("<td>&nbsp;</td>");
out.println("</tr>");
}
}
%>

解决方案 »

  1.   

    用jstl的标签,分支循环都能写
      

  2.   

    重新申明,请用Struts2.0的标签,希望各位能给代码,不要说怎样怎样!!!
    还有如果要用JSTL,也请给代码!!!
      

  3.   

    可以做个自定义的标签:我发个实例给你吧,public int doEndTag() throws JspException {
        try{  
          HttpServletRequest request = (HttpServletRequest)pageContext.getRequest();
          StringBuffer sb = new StringBuffer();
          UserSession curUser = (UserSession) request.getSession(true).getAttribute(Constants.bbsuser);
          int classId = ReqUtils.getInt(request,"cId");
          int forumId = ReqUtils.getInt(request,"fId");
          int curPage = ReqUtils.getInt(request,"curPage");
          String action = ReqUtils.getString(request, "action");
       
          List alltop = ArticleBiz.getAllTop();
          List classtop = ArticleBiz.getClassTop(classId);
          List forumtop = ArticleBiz.getForumTop(forumId);
          List otherlist = null;
          String forumAdmin = ForumBiz.getForumAdmin(forumId);
          String forumadmin[] = null;
          //不采用ibatis的分页  则xml中sql需要传入每一个分页的开始和结束位置 故采用hashmap存储参数
          int arttotal = 0;
          int pagesize = 20;
          int start = 0;
          String link = "";
             if(curPage>1){      // 如果不是第一页,则从该页的第一条开始
      start = (curPage-1)*pagesize;
       }
             HashMap<String, Integer> forumpage = new HashMap<String, Integer>();
             forumpage.put("forumid",forumId);
             forumpage.put("start",start);
             forumpage.put("end",pagesize);
          if(action.equals("j")){
          link = "Forum.htm?cId="+classId+"&fId=" + forumId + "&action=j";
              arttotal = ArticleBiz.getForumEliteC(forumId);
              otherlist = ArticleBiz.getForumElite(forumpage);
             }else{
              link = "Forum.htm?cId="+classId+"&fId=" + forumId;
              arttotal = ArticleBiz.getFmNoTopArtC(forumId);
              otherlist = ArticleBiz.getForumArt(forumpage);
             }
          Pages pages = new Pages(arttotal, curPage,pagesize,link);
             
             ArticleDto article = null; 
             String titleImg = "";
             String postTime = "";
             String lastPTime = "";
             String isLock = "";
             String isVote = "";
             int lastUserId = 0;
             sb.append("<table align=center cellSpacing=0 cellPadding=0 width=100%>");
          sb.append("<tr><td><a href=Post.htm?cId=");
          sb.append(classId);
          sb.append("&fId=");
          sb.append(forumId);
          sb.append("&action=post>");
          sb.append("<img src=webapp/images/newpost.gif border=0 alt=发表新帖子></a>&nbsp;&nbsp;");
          sb.append("<a href=Post.htm?cId=");
          sb.append(classId);
          sb.append("&fId=");
          sb.append(forumId);
          sb.append("&action=vote>");
          sb.append("<img src=webapp/images/newvote.gif border=0 alt=发表新投票></a>");
          sb.append("</td><td align=right><img src='webapp/images/jinhua.gif'>&nbsp;");
          sb.append("<a href='Forum.htm?cId=");
          sb.append(classId);
          sb.append("&fId=");
          sb.append(forumId);
          sb.append("&action=j'>");
          sb.append("<b>精华帖子</b>");
          sb.append("</a>");
          sb.append("</td>");
          sb.append("<form name=jumpca>");
          sb.append("<td align=right width='140px'>");
          sb.append("<img src=webapp/images/forumadmin.gif border=0 alt=论坛版主>&nbsp;&nbsp;");
              sb.append("<select name=jumpca onchange=adminshow()>");
                 sb.append("<option>论坛版主 :</option>");
                 sb.append("<option>----------</option>");
                 if(forumAdmin.length()>1){
                 forumadmin = StringUtils.split(forumAdmin, ",");
                 for(int j=0; j< forumadmin.length; j++) {
                  sb.append("<option value=User.htm?uId=");
                   sb.append(UserBiz.getUserId(forumadmin[j]));
                   sb.append(">");
                     sb.append(forumadmin[j]);
                     sb.append("</option>");
                 }
                 }
                 sb.append("</select>&nbsp;</td>");
          sb.append("</form>");
          sb.append("</tr>");
          sb.append("</table>");
          
          out.println(sb);
             sb = null;
         }catch(Exception e){
                bbslog.error("ForumList tag's doEndTag error!");
         }
         return 6;
     }
      

  4.   

    <c:forEach var="sp" items="${list2}" varStatus="status">
      <tr>
          <td><c:out value="${sp.license}"/></td>
          <td><c:out value="${sp.gps_begin}"/></td>
          <td><c:out value="${sp.gps_end}"/></td>
      </tr>
    </c:forEach> 
      

  5.   

    JSTL标签
    在jsp引入标签库
      <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
    或者
      <%@ taglib prefix="c" uri="WEB-INF/c.tld" %>
      (前提:把jstl标签加入到web-inf目录)
      

  6.   

    struts2标签:<%@taglib prefix="s" uri="WEB-INF/struts-tags"%>  
    <s:iterator value="#request.list2" status="statu" id="sp">
        <tr>
            <td><s:property value="license" /></td>
            <td><s:property value="gps_begin" /></td>
            <td><s:property value="gps_end" /></td>
        </tr>
    </s:iterator>这个应该没错。
      

  7.   

    上面的回答我都看了,没有一个符合要求的。
    晕!
    5楼的和8楼的应该回复的是片段3的代码吧,可是里面有一个i++没有看到吗?
    还有里面的第二个for循环条件是for (int j = i; j < 4; j++) {},这里面也用到了i,你们那个真是不靠谱了。
    期待有其他人能搞定.....
    等待中......
      

  8.   


    不知道你的那个String数组怎么生成,
    但是下面的if判断还是实现了
    我是把你的数组保存在request中,命名为list
    <s:iterator id="str" value="#request.list">
    <tr>
    <td><s:property value="#str"/></td>
    <s:if test="#str==\"1\""  >
    <td align="center" bgcolor="#009900">
    </td>
    </s:if>
    <s:else>
    <td align="center" bgcolor="#E8E8E8">
    </td>
    </s:else>
    </tr>
    </s:iterator>
      

  9.   

    用struts的taglib嘛,C 核心库应该可以满足你了,<c:foreach> <c:if>这些的
      

  10.   

    片段1:<c:forEach var="string" items="${work}" varStatus="status">
        <c:choose>
            <c:when test="${string == 'l'}">
                <td align="center" bgcolor="#009900">&nbsp;</td>
            </c:when>
            <c:otherwise>
                <td align="center" bgcolor="#E8E8E8">&nbsp;</td>
            </c:otherwise>
        </c:choose>
    </c:forEach> 
      

  11.   

    片段2:<c:forEach var="i" begin="1" end="4">
        <tr higth="20">
    </c:forEach>
      

  12.   

    终于看到靠谱的了,楼上的两位都比较靠谱,不过是用JSTL标签实现的。
    希望那个片段3有人能写出来,谢谢!
    希望大家尽量用Struts2.0的标签实现!
      

  13.   

    片段3:
    后台java代码:do {
        list2.add(null);
    } while(list.size() < 4);
        
    request.setAttribute("list2", list2);
    JSP代码:<c:if test="${list2!= null}">
        <c:forEach var="sp" items="${list2}" varStatus="status">
            <tr>
                <td><c:out value="${sp.license}" /></td>
                <td><c:out value="${sp.gps_begin}" /></td>
                <td><c:out value="${sp.gps_end}" /></td>
            </tr>
            <c:if test="${sp== null}">
                <tr>
                    <td>&nbsp;</td>
                    <td>&nbsp;</td>
                    <td>&nbsp;</td>
                </tr>
            </c:if>
        </c:forEach>
    </c:if>
      

  14.   

    片段3,你前台总是要显示4行。
    jstl标签最多遍历list2.size()行。
    我找不到让它一共遍历4行的办法。
    只能后台设置list2里面4个对象。
    多余的用null填充。struts2还没学。不过标签使用原理都是一样的。
    如果struts2支持自定义设置遍历次数的话,
    后台就不用设置 null 对象进 list2 了。
      

  15.   

    不愿意结贴,答案实在不是我想要的。
    还有你写的片段3的代码对吗?
    我的意思是指你的那段do、while循环,好像不对吧。
    你写的那个是死循环吧,比如list.size()==1的话,那不是永远都在循环吗?等待...
      

  16.   


    我是没有看见struts2可以生成你想要的数组,要不你试试<s:generator>标签
    <s:generator count="4"
    val="'0,1,2,3,4,5,6'" separator=",">
    <s:iterator status="st">
    <tr height="20px">
    </s:iterator>
    </s:generator>
    val中的值是手动写的,应该也可以自动完成,其实你可以再request中去保存你想要的数组,在用标签表示出来,感觉你现在是想用标签去创建数组?
      

  17.   

    修正!
    // 你看不出来哪儿写错了啊?
    do {
        list2.add(null);
    } while(list2.size() < 4);
        
    request.setAttribute("list2", list2);
    还不结账?
      

  18.   

    实现你的需求了。
    你参照这个自己去使用 struts2 的标签实现。
    标签使用原理都是一样的只是设置标签属性和属性值的语法不一样。自己学习学习!
      

  19.   

    1:<%
    String[] work = new String[24];
    %>
    <s:iterator value="work">
        <s:property /> <br />
    </s:iterator> 
    ===================================
    2:<s:generator count="4" val="%{'1,2,3,4'}" separator=","> 
        <s:iterator> 
            <tr height="20px"> 
        </s:iterator> 
    </s:generator> 
      

  20.   


    片段1:
    <c:forEach var="i" begin="0" end="23">
         <logic:euqal value="1" name="i">
            <td align="center" bgcolor="#009900">&nbsp;</td>
         </logic:euqal>
         <logic:notEuqal value="1" name="i">
            <td align="center" bgcolor="#E8E8E8">&nbsp;</td>
         </logic:notEuqal>
    </c:forEach>
    片段2:
    <c:forEach var="i" begin="1" end="4">
         <tr higth="20">
    </c:forEach>
    片段3:
    <c:set var="list" value="${requestScope.list2}" />
    <logic:present name="list2"> <!-- 判断list2是否存在 -->
    <c:set var="i" value="${fn.length(list)}"></c:set> <!-- 用fn获得list的size() -->
    <c:forEach var="sp" items="${requestScope.list2}">
    <tr>
    <td>${sp.license }</td>
    <td>${sp.gps_begin }</td>
    <td>${sp.gps_end }</td>
    </tr>
    </c:forEach>
                    <c:if test="${i<4}"> <!-- 如果i大于4不循环 -->
       <c:forEach var="j" begin="${i}" end="4"> <!-- 用fn获得list的size() -->
       <tr>
    <td>&nbsp;</td>
    <td>&nbsp;</td>
    <td>&nbsp;</td>
       </tr>
       </c:forEach>
                    </c:if>
    </logic:present>3个都测试通过~记得在jsp先导入这些<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
    <%@ taglib uri="http://struts.apache.org/tags-logic" prefix="logic" %>
    <%@ taglib uri="http://java.sun.com/jsp/jstl/functions" prefix="fn"%> 
      

  21.   

    咦~刚才检查了来着.记得上面那个<c:if>的test是${i>4}第四个注释就是从i开始循环到4,完全照着你的代码改的.刚才我写上去的时候疏忽了这两点.
      

  22.   

    god!
    楼上的是我见过写的最好的实现题目要求的代码,虽然仍然是用JSTL实现的,不过写的很好!
    有一点想问一下:
    <c:set var="i" value="${fn.length(list)}"></c:set> <!-- 用fn获得list的size() -->
    此i的值其实就是list2的size,难道不能直接取list2中的值吗?
    即value="${fn.length(requestScope.list2)}",我猜测应该不可以吧,不过仍然希望你能回答一下。还有<%@ taglib uri="http://java.sun.com/jsp/jstl/functions" prefix="fn"%> 
    一般的struts中的jar包中包含的只有4个标签库,昨天我看到这个东西,知道了这个标签可以去list的size,
    但是没有下载到! 你那里应该有吧,能传给我吗?谢谢了!
    我的联系方式:QQ : 573 673 828 Email:[email protected] 或者 [email protected]
    传给我后,请留言,告知传到哪个里面,谢谢!到时候结贴给分!