Bom, tenho um form que tem varias vezes um mesmo campo como por exemplo telefone e endereço, tem 5 campos de telefone e 2 de endereço e e eu quero pegar os valores que estão nesses campo e jogar para um arraylist pra depois processar eles no meu controller. Queria que alguem me desse uma luz ae porque não queria usar scriplet pra fazer isso e muito menos assim:
Dai eu jogo esses valores em um vetor no meu controller e depois passo eles no dao pra poder adicionar no mesmo ID.
Ah, tou usando JSP+SpringMVC pra fazer isso
@RequestMapping(value="/teste")
@ResponseBody
public void teste(@RequestParam("endereco") List<String> enderecos) {
System.out.println(enderecos);
}
E aí no formulário, o name dos inputs fica endereco. Tem algum problema com esta abordagem? Você mencionou que não queria deixar o formulário desta maneira, mas como quer deixar?
Queria saber se daria pra pegar os valores com o jquery por exemplo e colocar numa lista lá e depois jogar essa lista como parametro pro controller.
Meu controller tá assim
@RequestMapping("teste2")
public String adiciona(@RequestParam("clienteEnd") List<Contatos> contatos, Contatos cont){
for (int i = 0; i < contatos.size(); i++) {
System.out.println(contatos.get(i).getClienteEnd());
cont.setClienteEnd(contatos.get(i).getClienteEnd());
dao.adiciona(cont);
}
//Mais coisa pra baixo....
Hm ;o valeu cara, eu recebo essas duas variaveis que eram pra ir pra mesma lista teria como da um requestparam nas duas por exemplo e mandar pra uma List por exemplo e depois so fazer o for pra poder jogar cada variavel em seu set e tals?
Você pode receber os parâmetros separadamente (usando duas variáveis e anotando com @RequestParam) ou já popular o objeto da maneira que você quer. Algo assim:
@RequestMapping(value="/teste")
@ResponseBody
public void teste(@ModelAttribute Contato contato) {
System.out.println(contato);
}
public class Contato {
private List<String> enderecos;
private List<String> telefones;
// getters e setters ...
}
Consegue. Acredito que com vírgulas, do modo que você falou, também seja possível. Mas a maneira mais comum, é simplesmente repetir os parâmetros na requisição:
Fiz um teste e realmente dá certo. Quando você repete os parâmetros o broswer automáticamente coloca os valores separados por vírgula, então se você já mandar a string assim dá certo. Tô gostando bastante de trabalhar com o Spring MVC.
Sim tenho um DAO pra eles e tou mandando pro banco, so que como antes eu tava pegando um vetor ou tava jogando numa lista antes eu fazia um for e mandava um por um pro DAO
Vou te colocar meu codigo aqui
Get e Set
private String clienteTel;
private List<String> clienteTels;
//Get e Set
Dao
stmt.setString(2, contato.getClienteTel());
Controller
@RequestMapping(value="/teste")
@ResponseBody
public void teste(@ModelAttribute Contato contato) {
dao.adicionaContato(contato);
}
JSP e o JS
[code]
$.ajaxSettings.traditional = true;
var contato = {
clienteTels: [ clienteTels, clienteTels, clienteTels],
Isto já não é relacionado ao SpringMVC. Se você analisar frameworks ORM, como o Hibernate, verá que ele pode fazer cascade (ele salva também os relacionamentos do seu objeto).
Neste caso em específico, como aparentemente os telefones e endereços existem somente dentro deste contato (se você informar o mesmo endereço para outro contato ele vai duplicar), acho que você pode tratar tudo dentro do DAO, inclusive o for para persistir cada endereco e telefone.
Agora, se você tivesse uma entidade Endereco (e talvez um EnderecoDAO), seria interessante uma classe Service, para garantir o controle transacional.
Até dei uma olhada no Hibernate mas acabei não estudando muito sobre ele, e o problema de fazer eles separados pra cada um é que vão ser varios campos que se repetem, além de telefone e endereço, por isso fiz uma tabela com Dados Pessoais que são nome e afins que não se repetem e uma outra tabela de contatos com essas outras informações (1-n). Vou da uma olhada se consigo colocar pelo DAO mesmo iterando por lá, senão uso como vetor mesmo e dou o @Requestparam em todos eles heiuheiuhe.
Não sei se tu tá entendendo o que tou falando direito, qualquer coisa te mando o projeto se quiser.