2017-06-21 1 views
1

Je suis assez sûr que la réponse à cette question est disponible quelque part et je me demande probablement ce mauvais. Imaginez que j'ai une boîte de texte pour stocker l'expérience de travail précédente de quelqu'un sur un formulaire. L'utilisateur peut avoir une ou plusieurs expériences de travail antérieures. Ainsi, s'ils veulent entrer plus d'une expérience de travail, ils cloneront simplement la zone de texte pour entrer une nouvelle donnée (Pour le même champ). L'utilisateur peut le cloner autant de fois qu'il le souhaite. Ma question est, comment puis-je envoyer ces données (nombre aléatoire d'entrées uniques pour le même champ) de JSP à mon contrôleur? Je tentais de suivre cet exemple,Comment envoyer plusieurs valeurs pour le même champ de JSP à Controller dans Spring MVC (Eclipse)?

HTML

<div id="clonedInput1" class="clonedInput"> 
<div> 
    <label for="txtCategory" class="">Learning category <span class="requiredField">*</span></label> 
    <select class="" name="txtCategory[]" id="category1"> 
     <option value="">Please select</option> 
    </select> 
</div> 
<div> 
    <label for="txtSubCategory" class="">Sub-category <span class="requiredField">*</span></label> 
    <select class="" name="txtSubCategory[]" id="subcategory1"> 
     <option value="">Please select category</option> 
    </select> 
</div> 
<div> 
    <label for="txtSubSubCategory">Sub-sub-category <span class="requiredField">*</span></label> 
    <select name="txtSubSubCategory[]" id="subsubcategory1"> 
     <option value="">Please select sub-category</option> 
    </select> 
</div> 
<div class="actions"> 
    <button class="clone">Clone</button> 
    <button class="remove">Remove</button> 
</div> 

JAVASCRIPT - JQuery

var regex = /^(.+?)(\d+)$/i; 
var cloneIndex = $(".clonedInput").length; 

function clone(){ 
    $(this).parents(".clonedInput").clone() 
     .appendTo("body") 
     .attr("id", "clonedInput" + cloneIndex) 
     .find("*") 
     .each(function() { 
      var id = this.id || ""; 
      var match = id.match(regex) || []; 
      if (match.length == 3) { 
       this.id = match[1] + (cloneIndex); 
      } 
     }) 
     .on('click', 'button.clone', clone) 
     .on('click', 'button.remove', remove); 
    cloneIndex++; 
} 
function remove(){ 
    $(this).parents(".clonedInput").remove(); 
} 
$("button.clone").on("click", clone); 

$("button.remove").on("click", remove); 

Example. Je viens de remplacer la zone de liste déroulante avec la zone de texte. Ce que je veux, c'est que l'utilisateur peut entrer des données dans ces champs, mais plusieurs fois il veut, et à la fin, ils vont appuyer sur un bouton soumettre et il enverra les données à mon contrôleur. Je suis très nouveau à l'aide de Spring MVC, JSP, Servlet et contrôleurs. Toute sorte d'aide ou de direction serait géniale. Je sais comment créer le formulaire en HTML avec la fonction de clonage, mais je ne sais pas comment envoyer les données au contrôleur à la fois.

Répondre

0

Changez le nom de vos champs de saisie de "name[]" en simplement "name". Spring MVC liera toutes les valeurs à une collection de chaînes dans votre objet de formulaire.

Par exemple:

public class FormObject { 
    private List<String> txtCategory; 
    private List<String> txtSubCategory; 

    // get + set 

}