IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Servlets/JSP Java Discussion :

Conseil conception servlet modif table


Sujet :

Servlets/JSP Java

  1. #1
    Membre à l'essai
    Femme Profil pro
    Inscrit en
    Juin 2012
    Messages
    23
    Détails du profil
    Informations personnelles :
    Sexe : Femme

    Informations forums :
    Inscription : Juin 2012
    Messages : 23
    Points : 14
    Points
    14
    Par défaut Conseil conception servlet modif table
    Bonjour,

    J'ai un besoin qui doit sûrement être très commun.
    Je voudrais donc éviter de réinventer la roue mais je ne sais pas par où commencer.
    Mon but est d'avoir un code le plus simple et le plus lisible possible, en évitant d'ajouter trop de composants.
    Et qu'il soit réutilisable très facilement par d'autres.

    Voici l'idée de base:
    J'ai une table (simplifiée) avec les champs :

    [id_config] [int] NULL,
    [libelle] [varchar](150) NULL,
    [actif] [int] NULL

    Je veux créer une page d'administration qui permette de la piloter:
    => La page affiche toutes les lignes de la table dans un tableau, chaque info (sauf l'id) peut être modifiée (le texte est en saisie pré-remplie dans l'idée) via un bouton en fin de ligne.
    => La page permet de supprimer une ligne via un bouton en fin de ligne
    => La page permet de créer une nouvelle ligne


    Rien d'exceptionnel conceptuellement mais je ne sais pas comment le faire propre et efficacement.

    Les servlets que j'utilise déjà sont construit de cette manière :

    Code Java : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    import java.io.*;
    import java.util.*;
    import java.sql.*;
     
    import javax.servlet.*;
    import javax.servlet.http.*;
     
    import com.microsoft.sqlserver.jdbc.*;
     
    import java.net.*;
    import java.lang.Runtime;
    import java.text.DateFormat;
    import java.text.SimpleDateFormat ;
    import java.time.Period;
    import java.time.ZoneId;
    import java.text.ParseException ;
     
     
    public class monServletConfig extends HttpServlet {
     
    	public void doGet(HttpServletRequest request, HttpServletResponse response) throws IOException, ServletException
    	{
    		doPost(request, response) ;
    	}
     
    	public void doPost(HttpServletRequest request, HttpServletResponse response) throws IOException, ServletException
    	{	
    // Connexion BDD
     
             GenerePageConfig (connexionBDD)
            }
     
     
            private void GenerePageConfig (HttpServletRequest request, HttpServletResponse response, Connection connexionBDD) throws Exception
    	{
                    id_config= request.getParameter("id_config");
    		libelle = request.getParameter("libelle");
    		actif=  request.getParameter("actif");
                    if(bouton_valid==null)
    			bouton_valid="";
     
     
    // Creation de la page HTML (ce qui me semble moyen propre)
    System.out.println("Debut HTML");
     
    		out.println("<html><head>");
    		out.println("<meta http-equiv='Content-type' content='text/html; charset=UTF-8'>");
     
    		out.println("<meta name='viewport' content='width=device-width,initial-scale=1,user-scalable=no'>");
    		out.println("<title>"+InfoGenerales+"</title>");
     
    		out.println("<link rel='stylesheet' type='text/css' href='Formulaire.css'>");
    		out.println("<link rel='stylesheet' type='text/css' href='https://datatables.net/media/css/site-examples.css?_=0db1cd38700c0cfcdc140c39a2ebc306'>");
    		out.println("<link rel='stylesheet' type='text/css' href='https://cdn.datatables.net/1.10.21/css/jquery.dataTables.min.css'>");
    		out.println("<link rel='stylesheet' type='text/css' href='https://cdn.datatables.net/buttons/1.6.2/css/buttons.dataTables.min.css'>");
    		out.println("<link rel='alternate' type='application/rss+xml' title='RSS 2.0' href='http://www.datatables.net/rss.xml'>");
     
    		out.println("<script type=\"text/javascript\" src=\"../calendarDateInput.js\"></script>");
    		out.println("<script type='text/javascript' language='javascript' src='https://code.jquery.com/jquery-3.5.1.js'></script>");
    		out.println("<script type='text/javascript' language='javascript' src='https://cdn.datatables.net/1.10.21/js/jquery.dataTables.min.js'></script>");
    		out.println("<script type='text/javascript' language='javascript' src='https://cdn.datatables.net/buttons/1.6.2/js/dataTables.buttons.min.js'></script>");
    		out.println("<script type='text/javascript' language='javascript' src='https://cdn.datatables.net/buttons/1.6.2/js/buttons.flash.min.js'></script>");
    		out.println("<script type='text/javascript' language='javascript' src='https://cdnjs.cloudflare.com/ajax/libs/jszip/3.1.3/jszip.min.js'></script>");
    		out.println("<script type='text/javascript' language='javascript' src='https://cdnjs.cloudflare.com/ajax/libs/pdfmake/0.1.53/pdfmake.min.js'></script>");
    		out.println("<script type='text/javascript' language='javascript' src='https://cdnjs.cloudflare.com/ajax/libs/pdfmake/0.1.53/vfs_fonts.js'></script>");
    		out.println("<script type='text/javascript' language='javascript' src='https://cdn.datatables.net/buttons/1.6.2/js/buttons.html5.min.js'></script>");
    		out.println("<script type='text/javascript' language='javascript' src='https://cdn.datatables.net/buttons/1.6.2/js/buttons.print.min.js'></script>");
    		out.println("<script type='text/javascript' language='javascript' src='https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.8.4/moment.min.js'></script>");		
    		out.println("<script type='text/javascript' language='javascript' src='https://cdn.datatables.net/plug-ins/1.10.19/sorting/datetime-moment.js'></script>");
     
    		//paramétrage data tables
    		// la ligne datatable.moment doit correspondre au format de la date dans la tableau pour pouvoir trier dessus.
    		out.println("<script type='text/javascript' class='init'> $(document).ready(function() {  ");
    		out.println("$.fn.dataTable.moment('DD/MM/YYYY');");				
    		out.println("$('#tab_recap').DataTable( {");
    		out.println("dom: 'Bfrtip',"); 
    		out.println("paging: false,"); 		
    		out.println("order: [[ 5, 'asc' ]], ");  // Indique la colonne qui sera triée par défaut
    		out.println("buttons: ['copy', 'csv', 'excel', 'pdf', 'print'],");
    		out.println("'language': {	'url': 'https://cdn.datatables.net/plug-ins/a5734b29083/i18n/French.json' } ");
    		out.println(" } ); ");
    		out.println(" } ); </script>");
     
    		out.println("</head>");
    		out.println("<body >");
     
                   // zone de recherche
                   out.println("<fieldset>");
                   out.println("<div id='exForm'><form id='idform' method=post>");
                   out.println("<label for='libelle '>libelle </label> <input id ='libelle ' type='text'  name='libelle '><br>");	
                   out.println("</fieldset>");
     
    		out.println("<input type='submit' class='button' value=\'Rechercher\' name=\'bouton_valid\'>");
    		out.println("</form> </div>");
     
                    if(!bouton_valid.equals("Rechercher")||libelle .equals("")) 
    		{
                      // message
                    }
                    else
                   {
                                   // requete sur la BDD et stockage dans un tableau puis affichage:
     
    				for(cptCol = 0; cptCol < nombreColonnes; cptCol++)
    				{
    					out.println("<th>"+tab[0][cptCol]+"</th>");
    				}
     
    				out.println("</tr>");
    				out.println("</thead>");
    				out.println("<tbody>");
     
    				for (int i = 1; i <= maxtab; i++) // parcours des lignes 
    				{
    					out.println("<tr>");
    					for(cptCol = 0; cptCol < nombreColonnes; cptCol++)
    					{
    						out.println("<td>" + tab[i][cptCol] + "</td>");//lit
    					}
    					out.println("</tr>");
    				}
     
    				out.println("</tbody>");
    				out.println("</table>");
    				out.println("<br>");	
                   }
     
            }
     
    }

    Avec un web.xml, un tomcat 9 et Java 8

    Je ne sais pas trop comment ajouter et gérer des boutons en fin de ligne du tableau.
    Partez du principe que je n'ai que peu fait de servlet/web.

    Merci à vous !

  2. #2
    Expert confirmé Avatar de yildiz-online
    Homme Profil pro
    Architecte de domaine
    Inscrit en
    Octobre 2011
    Messages
    1 444
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Architecte de domaine

    Informations forums :
    Inscription : Octobre 2011
    Messages : 1 444
    Points : 4 563
    Points
    4 563
    Par défaut
    Séparer présentation et persistance serait un bon début.
    PXL le retro-gaming facile: Essayez-le

    Yildiz-Engine an open-source modular game engine: Website
    Yildiz-Online a 3D MMORTS in alpha: Facebook page / Youtube page

  3. #3
    Membre à l'essai
    Femme Profil pro
    Inscrit en
    Juin 2012
    Messages
    23
    Détails du profil
    Informations personnelles :
    Sexe : Femme

    Informations forums :
    Inscription : Juin 2012
    Messages : 23
    Points : 14
    Points
    14
    Par défaut
    Merci d'avoir pris le temps de me lire et de me répondre !


    J'aurais aimé un peu plus de concret sur la façon de procéder

  4. #4
    Expert confirmé Avatar de yildiz-online
    Homme Profil pro
    Architecte de domaine
    Inscrit en
    Octobre 2011
    Messages
    1 444
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Architecte de domaine

    Informations forums :
    Inscription : Octobre 2011
    Messages : 1 444
    Points : 4 563
    Points
    4 563
    Par défaut
    La résultante sera de ne plus avoir de import java.sql.*; import com.microsoft.sqlserver.jdbc.*; et d'exposer le comportement de persistente via une interface.
    PXL le retro-gaming facile: Essayez-le

    Yildiz-Engine an open-source modular game engine: Website
    Yildiz-Online a 3D MMORTS in alpha: Facebook page / Youtube page

  5. #5
    Modérateur
    Avatar de OButterlin
    Homme Profil pro
    Inscrit en
    Novembre 2006
    Messages
    7 310
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 7 310
    Points : 9 522
    Points
    9 522
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par Pandalex Voir le message
    J'aurais aimé un peu plus de concret sur la façon de procéder
    Pour être un peu plus concret, l'idée serait de se diriger vers un modèle MVC, très adapté pour le web.
    En gros, on distingue les choses par nature :
    1- M pour Modèle, ce sont les données utilisées par la vue (l'interface homme machine)
    2- V pour Vue, l'interface homme machine
    3- C pour Contrôleur, celui qui fait le lien entre la vue et les interactions de l'utilisateur

    Donc, il faudrait commencer par isoler les données de ta vue (il faudra un objet structurant pour définir les données récupérées de ta DB et une liste de cet objet à fournir à la vue pour l'afficher), ensuite créer la vue (une page jsp serait très très adaptée).
    Ensuite, ton contrôleur permettra de traiter les demandes, la première étant de récupérer la liste de valeurs.
    Le contrôleur finit toujours par afficher une vue.

    Il faudra certainement te documenter sur les JSP, c'est un peu la base.
    Une JSP est également une servlet, mais un peu spéciale.
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

Discussions similaires

  1. Modification table : ajout de colonne puis insertion data
    Par nkongolo.m dans le forum Langage SQL
    Réponses: 2
    Dernier message: 16/06/2006, 19h37
  2. [VB]modification tables liées VB/ACCESS
    Par NAHIAG dans le forum VB 6 et antérieur
    Réponses: 4
    Dernier message: 10/05/2006, 11h17
  3. Conseil pour Indexer une table DBase
    Par alainvh dans le forum Bases de données
    Réponses: 4
    Dernier message: 08/05/2006, 22h27
  4. [Conception][performance] mysql table de 10000 enregistrements / hashmap
    Par debdev dans le forum Collection et Stream
    Réponses: 5
    Dernier message: 09/07/2005, 11h29
  5. [Déb.][Servlet] modif de context de ServletConfig
    Par il_a_ri dans le forum Servlets/JSP
    Réponses: 3
    Dernier message: 03/12/2003, 18h53

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo