Come inviare più partite singole in Struts 2?

Ho un modulo di richiesta di acquisto, che crea dynamicmente una riga per ItemName , quantity , specification , unit di measurement .

Ho un pulsante chiamato “Aggiungi elemento”, che crea dynamicmente nuove righe.

Quando invio questo modulo, come faccio a inserirlo nella class Action in Struts2.

JSP:

   
+ Item Specification Quantity Unit Of Measurement Operations


Delete

Javascript per la creazione di righe dinamiche:

      function addRow(itemDetails) { var table = document.getElementById(itemDetails); var rowCount = table.rows.length; var row = table.insertRow(rowCount); var counts=rowCount-1; var cell1 = row.insertCell(0); var check = document.createElement("input"); check.type = "checkbox"; check.name="rdel"; cell1.appendChild(check); var cell2 = row.insertCell(1); var item = document.createElement("input"); item.type = "text"; item.name="id.item"; cell2.appendChild(item); var cell3 = row.insertCell(2); var specification = document.createElement("input"); specification.type = "text"; specification.name="id.specification"; cell3.appendChild(specification); var cell4 = row.insertCell(3); var quantity = document.createElement("input"); quantity.type = "text"; quantity.name="id.quantity"; cell4.appendChild(quantity); var cell5 = row.insertCell(4); var uom = document.createElement("input"); uom.type = "text"; uom.name="id.uom"; cell5.appendChild(uom); var cell6 = row.insertCell(5); var operations = document.createElement("a"); operations.setAttribute("href","#"); operations.innerText="Delete"; cell6.appendChild(operations); }  

    Metodo della class d’azione:

      private List id; public List getId(){ return this.id; } public void setId(List id) { this.id = id; } public String savePurchaseRequest(){ try{ setId(getId()); for(ItemDetails itemdetails:id ) { System.out.println( itemdetails.getItemname() + ":" + itemdetails.getSpecification() +":"+ itemdetails.getQuantity()+ ":"+ itemdetails.getUom() ); } }catch(Exception e){ System.out.println("Exception:"+e); } return SUCCESS; } 

    e class ItemDetails :

     public class ItemDetails implements java.io.Serializable { private String itemname; private String specification; private String quantity; private String uom; public ItemDetails() { } public ItemDetails(String itemname, String specification, String quantity, String uom) { this.itemname = itemname; this.specification = specification; this.quantity = quantity; this.uom = uom; } } public String getItemname() { return this.itemname; } public void setItemname(String itemname) { this.itemname = itemname; } public String getSpecification() { return this.specification; } public void setSpecification(String specification) { this.specification = specification; } public String getQuantity() { return this.quantity; } public void setQuantity(String quantity) { this.quantity = quantity; } public String getUom() { return this.uom; } public void setUom(String uom) { this.uom = uom; } } 

    +1, eri quasi arrivato.

    Basta modificare la parte Javascript in cui si assegna l’attributo name , incluso l’indice esattamente come si fa nell’iterazione:

     item.name="id.item"; specification.name="id.specification"; // ecc... 

    deve diventare

     item.name="id["+counts+"].itemname"; specification.name="id["+counts+"].specification"; 

    E tu sarai buono.

    1. Sembra che tu abbia impostato gli elementi del tuo modello da un’altra pagina. Prova a impostarli su un’altra variabile rispetto a id, qualcosa come idOutput o così, ho avuto dei problemi prima di quando provavo ad accedere a un campo tramite un getter quando questo campo veniva impostato prima, anche se non so perché questo fosse il caso.

    2. L’object modello (ItemDetails) ha bisogno di getter pubblici (come getItemname() ), in modo che JSP possa leggerli.

    È necessario inserire i nomi corretti nel codice JavaScript, in modo che OGNL sia in grado di gestirli correttamente e applicare i valori quando si invia il modulo.

    Per inviare una riga appena aggiunta devi utilizzare solo questi nomi sulla riga che hai inviato.