Mise à jour et ordonnancement des numéros dans une liste List

Fermé
polak1982 Messages postés 11 Date d'inscription dimanche 24 novembre 2013 Statut Membre Dernière intervention 6 septembre 2021 - 27 août 2016 à 11:40
KX Messages postés 16733 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 31 janvier 2024 - 30 août 2016 à 18:28
Bonjour à toutes et tous,
J’ai un objet colistier qui comporte les champs suivants :



Je souhaiterai qu’à la suppression de la ligne 2 par exemple, mes numéros soient mis à jour et ordonnés.
Merci par avance,
A voir également:

3 réponses

KX Messages postés 16733 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 31 janvier 2024 3 015
29 août 2016 à 16:43
Bonjour,

Conceptuellement il n'y a pas de raison qu'un objet possède une information qui dépend d'autres objets auxquels il n'est pas lié.

Si ce rang dépend de l'ensemble des objets de ton tableau, alors c'est au tableau de gérer ces numéros, pas à chacune des lignes alors qu'elles ne savent pas qu'elles sont dans un tableau ni quelles sont les autres lignes.

Donc supprime le numéro de ton objet et affiches le directement dans le tableau (ligne N : numéro N).

Si tu veux plus d'aide il va falloir nous donner le code que tu utilises pour afficher le tableau et supprimer une ligne.
0
polak1982 Messages postés 11 Date d'inscription dimanche 24 novembre 2013 Statut Membre Dernière intervention 6 septembre 2021
30 août 2016 à 11:55
Bonjour,
Voici le code que j'utilise pour afficher ma liste :

public List<Colistier> selectAllColistierCandidatList( int nIdCandidat )
{
List<Colistier> colistierList = new ArrayList<Colistier>( );
DAOUtil daoUtil = new DAOUtil( SQL_QUERY_SELECT_ALL_COLISTIERS_CANDIDAT );
daoUtil.setInt( 1, nIdCandidat );
daoUtil.executeQuery( );

while ( daoUtil.next( ) )
{
Colistier colistier = new Colistier( );
int nIndex = 1;

colistier.setIdColistier( daoUtil.getInt( nIndex++ ) );
colistier.setSexeColistier( daoUtil.getString( nIndex++ ) );
colistier.setNomColistier( Utils.stripAccents( daoUtil.getString( nIndex++ ) ) );
colistier.setPrenomColistier( daoUtil.getString( nIndex++ ) );
String strDateNaissanceColistier = daoUtil.getString( nIndex++ );
if( strDateNaissanceColistier != null )
strDateNaissanceColistier = Utils.dateToStringFormat( Utils.strToSqlDateFormat( strDateNaissanceColistier, "yyyy-MM-dd" ), DATE_FORMAT_DEFAULT );
colistier.setDateDeNaissanceColistier( strDateNaissanceColistier );
colistier.setNumeroOrdreColistier( daoUtil.getInt( nIndex++ ) );
colistier.setIdCandidat( daoUtil.getInt( nIndex++ ) );
colistierList.add( colistier );
}

daoUtil.free( );
return colistierList;
}


Puis la suppression :

  public void delete( int nKey, Plugin plugin )
{
DAOUtil daoUtil = new DAOUtil( SQL_QUERY_DELETE, plugin );
daoUtil.setInt( 1, nKey );
daoUtil.executeUpdate( );
daoUtil.free( );
}


Je souhaiterai qu'en supprimant la deuxième ligne que les numeros d'ordre soient misent à jour : 1, 2 ,3 et non 1, 3,4
Merci d'avance pour votre aide,
0
KX Messages postés 16733 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 31 janvier 2024 3 015
30 août 2016 à 13:52
Le code que tu montres là c'est de l'ajout et suppression en base de données, ce n'est pas ici qu'il faut gérer l'affichage. En base de données, les identifiants devraient être immuables, la même ligne aura toujours le même numéro tout au long de son existence.

C'est au moment de l'affichage (println en console, JTable en Swing, etc) que tu peux éventuellement mettre en place un affichage de numéro de séquence qui se suivent, mais totalement décorrélée de la donnée brute en base de données.

Remarque : si tu manipules des dates, il faut utiliser un type date dans ta base de données, et travailler sur des objets date en Java, mais ne pas faire de multiples conversions de String comme tu le fais pour la date de naissance.
0
polak1982 Messages postés 11 Date d'inscription dimanche 24 novembre 2013 Statut Membre Dernière intervention 6 septembre 2021
30 août 2016 à 14:23
Merci pour des précisions, voici là ou j'utilisa ma liste :
Candidat _candidat = getCandidat( request );

List<Colistier> listColistiers = ColistierHome.getColistierCandidatList( _candidat.getIdCandidat( ) );

Map<String, Object> model = getPaginatedListModel( request, MARK_COLISTIER_LIST, listColistiers, JSP_MANAGE_COLISTIERS );

model.put( MARK_CANDIDAT, _candidat );

return getPage( PROPERTY_PAGE_TITLE_MANAGE_COLISTIERS, TEMPLATE_MANAGE_COLISTIERS, model );


Le code html :
<tr>
   <th>#i18n{resultat.manage_colistiers.columnNumeroOrdreColistier}</th>
   <th>#i18n{resultat.manage_colistiers.columnNomColistier}</th>
	<th>#i18n{resultat.manage_colistiers.columnPrenomColistier}</th>
  <th>#i18n{resultat.manage_colistiers.columnDateDeNaissanceColistier}</th>
	<th>#i18n{resultat.manage_colistiers.columnSexeColistier}</th>


	<th>#i18n{portal.util.labelActions}</th>
</tr>
<@tableHeadBodySeparator />
<tr>
    <td>1</td>
	<td>${candidat.nomCandidat}</td>
	<td>${candidat.prenomCandidat}</td>
	<td>${candidat.dateNaissanceCandidat!''}</td>
	<td>${candidat.sexeCandidat}</td>
 </tr>
 <#list colistier_list as colistier >
<tr>
<#if (colistier.numeroOrdreColistier > 1)>
	<td>${colistier.numeroOrdreColistier}</td>
	<td>${colistier.nomColistier}</td>
	<td>${colistier.prenomColistier}</td>
	<td>${colistier.dateDeNaissanceColistier!''}</td>
	<td>${colistier.sexeColistier}</td>
	</#if>


Merci par avance
0
KX Messages postés 16733 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 31 janvier 2024 3 015
30 août 2016 à 18:28
Tu peux éventuellement conserver l'identifiant unique (enregistré en base de données) et ajouter un deuxième champs dans ton objet (le numéro d'ordre), mais qui ne serait pas persisté car il ne représente pas une donnée de l'objet, mais plutôt un champ technique lié à cette exécution particulière du code.

Exemple :

public class Colistier {

    private transient int numeroOrdre = 0;

    public void setNumeroOrdre(int num) {
        numeroOrdre = num;
    }

    public int getNumeroOrdre() {
        return numeroOrdre;
    }
}

for (int numero = 1; daoUtil.next(); numero++) {
    Colistier colistier = new Colistier();
    colistier.setNumeroOrdre(numero);
    colistier.setId(daoUtil.getInt(1));
    // ...

	<td>${colistier.numeroOrdre}</td>
	<td>${colistier.id}</td>
0