maneira simples utilizando o Spring MVC do Java.Ola, depois de um bom tempo sem postar nada, ca estou eu de volta e agora trazendo uma dica muito solicitada e dificil de encontrar. Essa semana precisei fazer isso, em que o usuario pudesse inserir varios produtos ao mesmo tempo, tipo uma lista de produtos e posteriormente salvar no banco, entao vamos la:Em nosso exemplo criaremos uma lista de produtos, onde o usuario podera incluir varios produtos e posteriormente salvar ao banco, para isso criaremos a classe Produto.java:package com.projexemplolistaform.modelo;public class Produto { private long id; private String descricao; public long getId() { return id; } public void setId(long id) { this.id = id; } public StringgetDescricao() { return descricao; } public void setDescricao(Stringdescricao) { this.descricao = descricao; }}Agora criaremos uma nova classe, ProdutoListView.java, nessa classe tera a lista dos produtos que sera enviada pelo form:packagecom.projexemplolistaform.view;import java.util.List;importcom.projexemplolistaform.modelo.Produto;public class ProdutoListView { private List<Produto> produto; public List<Produto>getProduto() { return produto; } public voidsetProduto(List<Produto> produto) { this.produto = produto; }}Criamores tambem o controller ProdutoController.java, nesse teremos 2 metodos, sao eles: novo: metodo para criar um novo produto, onde incluiremos a lista de produtos com o form;salvar: metodo para salvar que recebera a lista de produtos e posteriormente listar os itens na tela ListaProdutos.jsppackagecom.projexemplolistaform.controller;import java.util.ArrayList;import java.util.List;importjavax.servlet.http.HttpSession;importorg.springframework.stereotype.Controller;importorg.springframework.ui.Model;importorg.springframework.web.bind.annotation.ModelAttribute;importorg.springframework.web.bind.annotation.RequestMapping;importcom.projexemplolistaform.modelo.Produto;importcom.projexemplolistaform.view.ProdutoListView;@Controller@RequestMapping("/Produto")public class ProdutoController { @RequestMapping("Novo") public String novo(Modelmodel, HttpSession session){ return "Produto/Novo"; } @RequestMapping("Salvar") public String salvar(@ModelAttribute("listaProdutos") ProdutoListViewprodutoListView, Model model){ List<Produto> produtos = new ArrayList<Produto>(); for (Produto produto :produtoListView.getProduto()) { if (produto.getId() !=0 && produto.getDescricao() != null){ produtos.add(produto); } } model.addAttribute("produtos", produtos); return "Produto/ListaProdutos"; }}Alguns comentarios do codigo acima do metodo salvar: Repare que estamos criando o @ModelAttribute("listaProdutos") esse parametro sera passado pelo form, que criaremos mais a frente, esse mesmo parametro recebe uma lista de produtos, que criamos em ProdutoListView.java. Tambem estamos criando um for, para percorrer a lista de produtos e que aceitem somente os produtos que tenham id e descricao preenchidos e posteriormente enviamos a lista de produtos para a pagina ListaProdutos.jsp que tambem criaremos mais a frente.Com nosso controller ja criado, esta na hora de criar nossa pagina JSP de cadastro dos produtos, Novo.jsp:<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %><%@ taglib prefix="form" uri="http://www.springframework.org/tags/form"%><%@ page language="java" contentType="text/html;charset=ISO-8859-1" pageEncoding="ISO-8859-1"%><!DOCTYPE htmlPUBLIC "-//W3C//DTDHTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"><html><head><meta http-equiv="Content-Type"content="text/html; charset=ISO-8859-1"><title>Novo Produto como Lista</title> <script src="http://ajax.googleapis.com/ajax/libs/jquery/2.0.2/jquery.min.js"></script> <script language="javascript"> var contador = 1; //Adicionaum novo item na tabela function adiciona(){ var vid = $('#codigo').val(); var vdescricao = $('#produto').val(); $('#produtosAdicionados').append('<tr><td><inputtype="text" name="produto['+ contador +'].id" id="produto['+ contador +'].id" value="' + vid +'"></td>'+ '<td><input type=text name="produto['+contador+'].descricao"id="produto['+contador+'].descricao" value="'+vdescricao+'"></td>'+ '<td><inputtype="button" value="Deletar"onclick="javascript:removeLinha(this)"></td></tr>'); contador++; } //Remove o item da tabela function removeLinha(row) { $(row).parent().parent().remove(); } </script></head><body> <table> <tr> <th>Id</th> <th>Descricao Produto</th> <th></th> </tr> <tr> <td><input type="text"id="codigo" name="codigo"></td> <td><input type="text"id="produto" name="produto"></td> <td><input type="button"onclick="javascript:adiciona();" value="Adicionar"></td> </tr> </table> <form:form id="frmNovoProduto"action="Salvar" method="POST"modelAttribute="listaProdutos"> <h3>Itens Adicionados:</h3> <div> <table id="produtosAdicionados"></table> </div> <div> <button type="submit">Salvar</button> </div> </form:form></body></html>Alguns comentarios do codigo acima: No javascript estamos criando o metodo:adiciona(), que ira pegar os valores informados pelo usuario e criar uma nova tabela entro do form frmNovoProduto;removeLinha() o usuario podera excluir as linhas da lista que foram inseridas pelo metodo adiciona()Repare tambem que no form frmNovoProduto adicionamos o modelAttribute que devera ser o mesmo nome do parametro produtoListView do