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 !