<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条,请教正确的改正方法
<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条,请教正确的改正方法
应该动态计数,是否获得满了10条typeId为1的
<%int i = 0;%>
<s:if test="%{typeId==1}">
<%
i++;
if(i < 10){
//......
}
%>
</s:if>
为什么不直接在数据层处理呢?
既然页面只需显示type=1的前10条记录。。完全可以在后台做好逻辑然后页面只负责显示
如果newslist集合中其他type!=1的数据页面没有用到的话,,完全没有必要查出来。。既减慢了查询速度。。也减慢了迭代速度也可以说newslist包含冗余数据如果实在要在前台显示。。可以用2楼的方法。。直接用java代码加一个计数器i。。标签做计数器较麻烦
[/code]
将<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不过楼上的说得都对,干嘛要把这个逻辑放在视图层呢!
楼主用用STRUTS2投影吧,这玩意挺好用的。