afficher un nombre limité de produit par page

afficher un nombre limité de produit par page - Java - Programmation

Marsh Posté le 23-02-2009 à 22:56:55    

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">
<body>
 
<table width="200" border="0">
    <tr>    
      <td>      
        <table border=1>
          <tr>
            <td><input type="checkbox" checkme="group" tabindex="12"></td>
            <td>Type</td>
            <td>Sujet</td>
            <td>Message</td>
          </tr>
            <%
               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;              
               %>
          <tr>
            <td><input name="<%=idCon%>" type="checkbox" checkme="group" tabindex="12">
             <td> <%=typeCon%></td>
             <td> <%=sujetCon%></td>
             <td><a href="" >détails </a></td>
          </tr><%}%>
        </table>      
      </td>
    </tr>
    <tr>
      <td align="center"><input onclick="return confirm();" name="submit" type="submit" id="supprimer" value="supprimer" tabindex="3"/></td>
    </tr>
  </table>  
  <table>
    <tr>
     <td width="200px"><%if(precedent >= 1){out.println("<a href=admin_consulter_mail1.jsp?p="+precedent+">precedent</a>" );}%></td>
     <td width="200px"><%if(suivant <= v.size()){out.println("<a href=admin_consulter_mail1.jsp?p="+suivant+">suivant</a>" );}%></td>
    </tr>
  </table>
</body>
</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

Reply

Marsh Posté le 23-02-2009 à 22:56:55   

Reply

Marsh Posté le 02-03-2009 à 16:56:07    

Code :
  1. ...
  2. int p = 1; // ici il faut lire le paramètre de la requête
  3. int suivant = p + 1;
  4. int precedent = p - 1;
  5. int nppp=3;
  6. for(int i=1; i<=nppp;i++) { // ici il faut définir les bornes inférieur et supérieur en fonction de p
  7. ...
  8. }

Reply

Marsh Posté le 02-03-2009 à 17:59:06    

bonjour
merci pour la réponse
j'ai modifié le code en:
 
<%                    
              int pageCourante = 1;
               if((null!=p)&&(!"".equals(p))) {pageCourante=request.getParameter("Integer.parseInt(p)" );}  
               int suivant = pageCourante  + 1;
               int precedent = pageCourante  - 1;
               int nppp=3;
               Contact cont= new Contact();
               Vector v=cont.getListeContact();
               for(int i=pageCourante; 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;                
               %>
 
avec dans l'entête g fait:
<%@ page contentType="text/html;charset=windows-1252" import="view.*,java.util.*"%>
<jsp:useBean id="p" class="java.lang.String" scope="request" />
 
 
mais le meme probleme persiste encore
car le résultat m'affiche pour la premiere fois les trois premieres enregistrement de la bd et en cliquant sur suivant il m'affiche les mêmes trois première enregistrements;; il me manque surement une boucle pour passer aux autres!
mais quesque je dois incrémenter??
merci de votre aide

Reply

Marsh Posté le 02-03-2009 à 18:56:26    

<jsp:useBean id="p" class="java.lang.String" scope="request" />

 

ça ne récupère pas un paramètre de la requête mais un attribut
http://www.xyzws.com/servletfaq/wh [...] arameter/1

 
Code :
  1. // Récupération du paramètre de la requête
  2. String p = request.getParameter("p" );
  3. int pageCourante = 1;
  4. if ((null!=p) && (!"".equals(p))) {pageCourante=Integer.parseInt(p);}
 

Maintenant il faut trouver une formule qui donne l'indice du premier item d'une page, ça nous donnera la borne inférieur de la boucle for.

 

Si ta liste contient 10 éléments et vu que nppp est égal à 3, leurs indices (de 0 à 9) seront répartis comme ça :
page 1 : 0 1 2
page 2 : 3 4 5
page 3 : 6 7 8
page 4 : 9

 

Avec un peut de réflexion/intuition/habitude, on trouve la relation suivante :
indicePremierItem = (pageCourante - 1) * nppp

 

d'où la boucle for :

Code :
  1. for (int i = indicePremierItem; i < indicePremierItem + nppp; i++) {...
 

Autre remarque :

Code :
  1. Contact cont= new Contact();
  2. Vector v=cont.getListeContact();


Çà n'a rien à voir mais tu gagnerai en performance si tu mettais la liste de contacts en session lors de l'appel à la première page parce que là tu fais un appel à la base de données à chaque fois...


Message édité par Bidem le 02-03-2009 à 18:57:32
Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed