Afficher un nombre limité de produit par page

cs_CHAmardal Messages postés 5 Date d'inscription vendredi 17 octobre 2008 Statut Membre Dernière intervention 8 octobre 2009 - 23 févr. 2009 à 23:00
nhervagault Messages postés 6063 Date d'inscription dimanche 13 avril 2003 Statut Membre Dernière intervention 15 juillet 2011 - 24 févr. 2009 à 13:11
Bonjour,
je développe une application web avec jsp (j2ee), mon besoin est de faire importer un nombre limité de produit par page avec deux bouton "suivant" et "précédent" pour pouvoir naviguer, mon code est celui-ci:

<%@ page contentType="text/html;charset=windows-1252" import="view.*,java.util.*"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">

    ----
    
           
        <table border=1>
          ----

           , </td>
            Type,
            Sujet,
            Message,
         
            <%
               Contact cont= new Contact();
               Vector v=cont.getListeContact();
               int p = 1;
               int suivant = p + 1;
               int precedent = p - 1;
               int nppp=3;
               for(int i=1; i<=nppp;i++){
               Contact s=(Contact)v.elementAt(i);
               String typeCon=s.TypeContact;
               String sujetCon=s.sujetContact;
               String mailCon=s.mailContact;
               int idCon=s.idContact;              
               %>
          ----

            " type="checkbox" checkme="group" tabindex="12">
            , <%=typeCon%></td>
             <%=sujetCon%>,
             détails ,
          <%}%>
       
      
      </td>
    </tr>
    <tr>
      <td align="center"></td>
    </tr>
  </table>
      ----

     <%if(precedent >= 1){out.println("precedent");}%>,
     <%if(suivant <= v.size()){out.println("suivant");}%>,
   
 

</html>

et la page contact.java est:
package view;
import com.evermind.sql.ResultSetBCELProxy;
import java.sql.*;
import java .io.*;
import java.util.*;
public class Contact
{
/**
   *
   * @param args
   */
public int idContact;
public String TypeContact;
public String sujetContact;
public String mailContact;
public String messageContact;

  public Contact(int idContact,String TypeContact,String sujetContact,String mailContact,String messageContact)
  {
  this.idContact=idContact;
  this.TypeContact=TypeContact;
  this.sujetContact=sujetContact;
  this.mailContact=mailContact;
  this.messageContact=messageContact;
   }
public Vector getListeContact(){  
  Vector tmp=new Vector();
  try
  {
    Connection con=Connexion.getConnexion();
    Statement st=con.createStatement();
    String requete="select * from contactadmin";
    ResultSet rs=st.executeQuery(requete);
    while(rs.next()){
    String Type=rs.getString("typeContact");
    String sujet=rs.getString("sujetContact");
    String mail=rs.getString("mailContact");
    String message=rs.getString("messageContact");
    Contact d=new Contact(Type,sujet,mail,message);
    tmp.addElement(d);    
    }
  }
  catch (Exception e)
  {
    e.printStackTrace();
  }
  return(tmp);  
  }
         }
 
le résultat que j'obtient apres l'exécusion de ce code c'est l'affichage des tois premiers messages (c'est bon) et lorsque j'appuie sur le bouton "suivant" il affiche les memes trois premiers messages
alors où est ma faute? svp aidez moi à trouver la bonne solution et merci d'avance

3 réponses

nhervagault Messages postés 6063 Date d'inscription dimanche 13 avril 2003 Statut Membre Dernière intervention 15 juillet 2011 37
23 févr. 2009 à 23:15
Salut,

C'est ton code qui est surement mal fait

il faut passer tes parametres soit par session form ou url (form est le plus recommandé) par exemple dans un champ hidden.

numeroPage
nombredelementparpage

et sur la page

tu fais

for (i = 1; i< nbelement || ( n * nbelementparpage + i ) > collection.length); i++)
{
    //if ( n * nbelementparpage + i ) > collection.length) break; equivalent à la deuxieme condition
    print collection.getIndex(n * nbelementparpage + i);
}

Le break n'est pas recommandé, j'ai mis une deuxieme condition.

Apres à toi de voir ce que tu veux, c'est non testé, c'est juste une idée
il peut avoir des problemes d'index.

Normalement ca doit fonctionner comme methode.
0
cs_CHAmardal Messages postés 5 Date d'inscription vendredi 17 octobre 2008 Statut Membre Dernière intervention 8 octobre 2009
24 févr. 2009 à 02:47
merci pour la réponse
mais g pas compris ce tu ve dire par
" il faut passer tes parametres soit par session form ou url (form est le plus recommandé) par exemple dans un champ hidden."
 ma page est déjà dans un form mais je l'ai pas mis lors de la question
mon code je l'ai changé en :

<%
               Contact cont= new Contact();
               Vector v=cont.getListeContact();
               int p = 1;
               int suivant = p + 1;
               int precedent = p - 1;
               int nppp=3;
               for(int i=1; i<v.size()||(p*nppp+i)>v.size();i++){
               Contact s=(Contact)v.elementAt(i);
               String typeCont=s.TypeContact;
               String sujetCont=s.sujetContact;
               String mailCont=s.mailContact;
               int idCont=s.idContact;             
               %>

mais cette fois iln'ya pas de résultat, c'est une erreur qui est affichée me disant :
java.lang.ArrayIndexOutOfBoundsException: 4 >= 4

si tu as une autre remarque n'hésiter pas svp
0
nhervagault Messages postés 6063 Date d'inscription dimanche 13 avril 2003 Statut Membre Dernière intervention 15 juillet 2011 37
24 févr. 2009 à 13:11
Ce que je veux dire avec les champs de formualaires cachés c'est que les positions sur ton tableau (page courante N/M) il faut le stocker dans la page par exemple dans un champ hidden.

Et donc cette valeur sera lu a la creation de la page
pour la page suivante elle sera incrementée + 1
pour la page precedente elle sera decrementée -1
0
Rejoignez-nous