<s:iterator value="#request.newslist" status="ne1">
<s:if test="%{typeId==1}">
  <s:if test="#ne1.index<10"> 
  <tr>
  <td height="24" style="padding-left:15px"> 
  <s:a href="detailShow.action?news.id=%{id}"><s:property value="title" /></s:a>   
  </td>
  </tr>
  </s:if>
 </s:if>   
</s:iterator>上面写的代码,开始我以为是对的,后来我发现了个问题,这样做的话如果是我数据库里面的数据前10条是属于typeId=1的话,就正常输出10条了,但如果我要是数据库里前10条不全都是等于typeId=1的话,输出就错了,即使我数据库里面有超过10条以上的typeId=1的数据,也没法输出10条来,我初步预料是ActionContext中的IteratorStatus对象存放的是我数据表中的前10条记录,并不是分类后的前10条,请教正确的改正方法 

解决方案 »

  1.   

    <s:if test="#ne1.index<10">  要显示10条的话是被这个写死了
    应该动态计数,是否获得满了10条typeId为1的
      

  2.   


    <%int i = 0;%>
    <s:if test="%{typeId==1}">
      <%
      i++;
      if(i < 10){
        //......
      }
      %>
    </s:if>
    为什么不直接在数据层处理呢?
      

  3.   

    你服务器端处理,List中只存10条记录,用数据库的分页查询
      

  4.   

    [code]
    既然页面只需显示type=1的前10条记录。。完全可以在后台做好逻辑然后页面只负责显示
    如果newslist集合中其他type!=1的数据页面没有用到的话,,完全没有必要查出来。。既减慢了查询速度。。也减慢了迭代速度也可以说newslist包含冗余数据如果实在要在前台显示。。可以用2楼的方法。。直接用java代码加一个计数器i。。标签做计数器较麻烦
    [/code]
      

  5.   

    既然页面只需要显示type=1的10条记录,,那完全可以在后台逻辑中将type=1的数据放入newslist,然后页面直接用你现有的代码显示就行了。如果其他type!=1的数据页面没有用到。。完全没有必要查询出来。。既减慢了查询速度,也减慢了迭代速度。。也增加了newslist冗余如果实在要全部查询出来或者放入newslist中并且到页面迭代,那2楼的方法就可以用java代码加个计数器i,因为用标签做计数器麻烦
      

  6.   

    使用视图层过滤:
    将<s:iterator value="#request.newslist" status="ne1">改成<s:iterator value="#request.newslist.{? #this.typeId == 1}" status="ne1">试试。还有其他一些用法,可参考http://blog.csdn.net/oxcow/article/details/5538533不过楼上的说得都对,干嘛要把这个逻辑放在视图层呢!
      

  7.   


    楼主用用STRUTS2投影吧,这玩意挺好用的。