2017-04-18 1 views
1

J'ai des boutons créés dynamiquement.Bouton dynamique créé dans le servlet

<form action="/" method="post"> 
    <table cellpadding="4"> 
     <% 
      List<Room> rl = (List<Room>) request.getAttribute("roomList"); 
      if(rl != null) { 
       for (Room r : rl) { 
        String name = r.getName(); 
     %> 
      <tr> 
       <td><%=name%></td> 
       <td><input type="submit" value="Add a Booking" name=<%=name%> /></td> 
      </tr> 
     <% 
       } 
      } 
    %> 
    </table> 

Je sais que le bouton a été cliqué avec le code suivant;

String addButton = req.getParameter("addButton"); 

Cependant, dans cette situation, je ne suis pas capable de connaître le nom du bouton. Parce que le nom du bouton pourrait être n'importe quoi. Comment pourrais-je savoir quel bouton a été enfoncé? Merci d'avance!

+1

Vous avez un seul bouton soumettre votre code, alors pourquoi attendez-vous plus? – MaxZoom

+0

Merci pour votre commentaire, mais il est dans la boucle "for (Room r: rl)". Il y aurait un ou plusieurs – Jungleman

+0

je vois, s'il vous plaît vérifier ma réponse ci-dessous. – MaxZoom

Répondre

1

Vous pouvez possiblement au moins deux solutions:

1. Solution en code Java côté serveur
en JSP chacun des bouton d'envoi sera nommé avec le préfixe submit_

<input type="submit" value="Add a Booking" name=<%="submit_"+name%> /> 

Lorsque la demande est envoyée au serveur vous paramètres de la boucle et la recherche d'un avec ce préfixe, en sauvegardant sa valeur à submit attribut:

private void setSubmitValue(HttpServletRequest request) { 
    String SUBMIT_PREFIX = "submit_"; 
    for (Enumeration e = request.getParameterNames(); e.hasMoreElements();) { 
    String key = (String) e.nextElement(); 
    if (key.startsWith(SUBMIT_PREFIX)) { 
     String value = key.substring(SUBMIT_PREFIX.length()); 
     request.setAttribute("submit", value); 
     break; 
    } 
    } 
} 

2. Solution avec JavaScript sur le côté client (navigateur)
Initiez sous la forme nouveau widget caché qui contiendra le nombre de chambre cliqué. Lorsque le bouton est cliqué, sa valeur est stockée dans ce widget.
Lorsque la demande est envoyée, du côté serveur, vous venez de lire la valeur de ce paramètre (nom du widget).
est un exemple ci-dessous: chambre n ° aura valeur de bouton cliqué

var form = document.forms['add-room']; 
 
$(form).on('click', 'button', function(e) { 
 
    e.preventDefault(); 
 
    var name = $(this).attr('name') 
 
    form['room-nr'].value = name.replace(/\D+/, ''); 
 
    console.log(form['room-nr'].value); 
 
    //form['add-booking'].click(); 
 
});
.hide { 
 
    display: none; 
 
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script> 
 
<form name="add-room" action='.'"> 
 
    <input type="hidden" name="room-nr" value="" /> 
 
    <table cellpadding="4"> 
 
    <tr> 
 
     <td>room1</td> 
 
     <td> 
 
     <button type="button" name="room-1">Add</button> 
 
     </td> 
 
    </tr> 
 
    <tr> 
 
     <td>room2</td> 
 
     <td> 
 
     <button type="button" name="room-2">Add</button> 
 
     </td> 
 
    </tr> 
 
    <tr> 
 
     <td>room3</td> 
 
     <td> 
 
     <button type="button" name="room3">Add</button> 
 
     </td> 
 
    </tr> 
 
    </table> 
 
    <input type="submit" value="Add a Booking" name="add-booking" class="hide" /> 
 
</form>

+0

Cela fonctionne parfaitement, juste une question de plus. Parfois, l'attribut name obtient une valeur avec de l'espace, par exemple; "Chambre 1". Avec cette valeur L'attribut name est indiqué par "name =" submit_Room "1". Comment pourrais-je le gérer? – Jungleman

+1

Je conseillerais d'encoder des données de formulaire sur submit et décrypter du côté serveur. Vous pouvez trouver plus à ce sujet sur Internet i.e [ici] (http://www.diogogmt.com/temp-slug-108/) – MaxZoom

0

Vous devez effectuer les opérations suivantes:

type d'entrée < = "submit" value = "<% name% > "name =" Ajouter Réservation" />

+0

Mais je voudrais savoir lequel est pressé. Dans cette situation; Je vais avoir 5 boutons avec le même nom. – Jungleman

+0

La valeur unique <%name%> vous le dira. – VivekRatanSinha

+0

Merci! Cela fonctionne bien, cependant, maintenant tout le texte du bouton est un non-sens. – Jungleman