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:
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 !