Concernant tout autre élément normal , la paire name-value
d'un sera envoyée en tant que paramètre de requête.
Le principal inconvénient est que les éléments et ne fonctionnent pas correctement dans MSIE. Dans toutes les versions de MSIE, l'attribut value
d'un élément button ne sera pas envoyé en tant que valeur du paramètre, mais plutôt son contenu (le contenu de la balise) sera envoyé !
De plus, dans IE6, il y a un autre bug étonnant : non seulement la paire name-value du bouton pressé sera envoyée, mais aussi celles de tous les autres boutons non pressés dans le formulaire ! De cette manière, vous ne pouvez pas distinguer le bouton pressé du côté serveur.
La solution qui fonctionne en combinaison avec tous les navigateurs est d'utiliser et de leur donner un nom différent (ou le même nom mais une valeur différente).
Par exemple :
en combinaison avec :
if (request.getParameter("validate") != null) {
// Bouton Valider pressé.
} else if (request.getParameter("download") != null) {
// Bouton Télécharger pressé.
} else if (request.getParameter("submit") != null) {
// Bouton Soumettre pressé.
}
ou
en combinaison avec :
String action = request.getParameter("action");
if ("Valider".equals(action)) {
// Bouton Valider pressé.
} else if ("Télécharger".equals(action)) {
// Bouton Télécharger pressé.
} else if ("Soumettre".equals(action)) {
// Bouton Soumettre pressé.
}
La dernière méthode offre plus de possibilités pour abstraire l'un et l'autre de manière plus élégante au niveau Java.
Soit dit en passant, je suppose bien sûr que vous utilisez déjà Apache Commons FileUpload pour traiter les données de formulaire multipart, si nécessaire avec l'aide d'un Filtre qui remet les données de formulaire multipart dans la carte des paramètres de la requête, sinon vous n'obtiendrez rien de HttpServletRequest#getParameter()
.