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
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?
B
brabuh
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?
W
wagnerfrancisco
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")@ResponseBodypublicvoidteste(@ModelAttributeContatocontato){System.out.println(contato);}publicclassContato{privateList<String>enderecos;privateList<String>telefones;// getters e setters ...}
Esta configuração (traditional = true) é para o jquery gerar uma url compatível com o spring. Por padrão o jquery faz o seguinte:
minhaurl?enderecos[]=1&enderecos[]=2
Com o traditional = true, estes colchetes não são adicionados na url.
M
maykoone
preciso fazer algo semelhante.
quer dizer então que se eu tiver um conjunto de strings no meu bean
private Set<String> tags;
e submeter uma string com os valores separados por vírgula o spring consegue fazer o bind para o meu bean?
W
wagnerfrancisco
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:
tags=abc&tags=def&tags=ghi
M
maykoone
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.
B
brabuh
Também tou gostando muito de trabalhar com o Spring vou da uma testada aqui, mas muito obrigado Wagner pelas respostas.
B
brabuh
Uma coisa que eu não entendi ali foi o seguinte
@RequestMapping(value="/teste")
@ResponseBody
public void teste(@ModelAttribute Contato contato) {
System.out.println(contato);
}
Como que eu vou imprimir essa lista ou jogar pro banco sei la? Eu tenho que fazer um for pra percorrer essa lista certo? Mas como que vou fazer ele ?
W
wagnerfrancisco
Você tá persistindo contatos no banco? Tem um DAO pra eles? Depende de como está o seu mapeamento…
B
brabuh
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
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.
B
brabuh
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.
W
wagnerfrancisco
Você certamente consegue iterar a coleção no DAO também, isto não é problema.