分行分页显示每页12条记录3行4列这是我的一段代码
<table width="680" height="156" border="0" align="center">
<%  
for(int j = 0 ;j<list.size();j=j+3){     
       %>
  <tr>
    <td width="150" height="216" ><%p =(Products)list.get(j); out.print(p.getP_name());%></td>
    <td width="150" height="216" ><%p =(Products)list.get(j+1); out.print(p.getP_name());%></td>
    <td width="150" height="216" ><%p =(Products)list.get(j+2); out.print(p.getP_name());%></td>
  </tr>
  <%}%>
</table>假如我数据库有8条数据就出现了数组越界

解决方案 »

  1.   

    更何况你这样写不是3行4列,而是3列。如果要3行4列的话,可以这样:<table width="680" height="156" border="0" align="center">
    <%
    int num = 4;   //列数
    int i = 1 ; 
    for(int j = 0 ;j<list.size();j=j++){   
      %>
      <% if( (i-1)%num == 0 ){ %>
      <tr>
      <% } %>
      <td width="150" height="216" ><%p =(Products)list.get(j); out.print(p.getP_name());%></td>
      <% if( i%num == 0 ){ %>
      </tr>
      <% } i++; %>
      <%}%>
    </table>
      

  2.   

    修正一下,我上面的代码“数据条数”要是“列数”的倍数才能输出“</tr>”
    修正如下,加多了个条件:
    <table width="680" height="156" border="0" align="center">
    <%
    int num = 4; //列数
    int i = 1 ;  
    for(int j = 0 ;j<list.size();j=j++){   
      %>
      <% if( (i-1)%num == 0 ){ %>
      <tr>
      <% } %>
      <td width="150" height="216" ><%p =(Products)list.get(j); out.print(p.getP_name());%></td>
      <% if( i%num == 0 || i == list.size() ){ %>
      </tr>
      <% } i++; %>
      <%}%>
    </table>
      

  3.   

    <table width="680" height="156" border="0" align="center">
      <%   
    for(int j = 0 ;j<list.size();j++){ //把j=j+3换成 j++  
      %>
    <% if(j%3==0) { %>
    <tr>  
    <%}%>
    <td width="150" height="216" ><%p =(Products)list.get(j); out.print(p.getP_name());%></td><% if((j%3==2 )|| (j == list.size()-1)) { %>
    </tr>
    <%}%>  <%}%>
    </table>
      

  4.   


    再次修正,引用的代码会造成某行有4列,而某行则只有3列(多数出现在最后一行)。这样的表格不太规范。
    完善一下,就是最后一行补上缺了的列。
    <table width="680" height="156" border="0" align="center">
    <%
    int num = 4; //列数
    int i = 1 ;   
    for(int j = 0 ;j<list.size();j=j++){   
      %>
      <% if( (i-1)%num == 0 ){ %>
      <tr>
      <% } %>
      <td width="150" height="216" ><%p =(Products)list.get(j); out.print(p.getP_name());%></td>
    <%
    if( i == list.size() && list.size()%num != 0 ){
    for( int k = 0; k < ( num - ( list.size()%num ) );k ++ ){
    %>
    <td></td>
    <%
    }
    }
    %>
      <% if( i%num == 0 || i == list.size() ){ %>
      </tr>
      <% } i++; %>
      <%}%>
    </table>
      

  5.   

    如果是8条的话,楼主这种写法肯定会报错了。你在for循环中加个判断不久行了。
      

  6.   

    为什么不用标签循环呢?看到这样的jsp头都大
      

  7.   

    不好意思,将j=j++改成j++<table width="680" height="156" border="0" align="center">
    <%
    int num = 4; //列数
    int i = 1 ;   
    for(int j = 0 ;j<list.size();j++){   
      %>
      <% if( (i-1)%num == 0 ){ %>
      <tr>
      <% } %>
      <td width="150" height="216" ><%p =(Products)list.get(j); out.print(p.getP_name());%></td>
    <%
        if( i == list.size() && list.size()%num != 0 ){
            for( int k = 0; k < ( num - ( list.size()%num ) );k ++ ){
        %>
        <td></td>
        <%
            }
        }
    %>  <% if( i%num == 0 || i == list.size() ){ %>
      </tr>
      <% } i++; %>
      <%}%>
    </table>