Boa noite,
então eu tenho um formulario, onde tenho um multiselect para selecionar os elementos do relacionamento.
Então, o VRaptor ja vai construir o objeto com a List do relacionamento?
O que preicso fazer para que isto seja feito?
Boa noite,
então eu tenho um formulario, onde tenho um multiselect para selecionar os elementos do relacionamento.
Então, o VRaptor ja vai construir o objeto com a List do relacionamento?
O que preicso fazer para que isto seja feito?
alguém?
Bom vamos lá…
Se quiser fazer na base do submit mesmo (ou seja, via action da propria pagina e nao via ajax), voce tem que processar cada seleçao.
Por exemplo se estiver montando um objeto casa com 3 paredes cada uma com uma cor…
Teria que montar 3 input hidden com
name=casa.parede[].cor e value=preto
name=casa.parede[].cor e value=amarelo
name=casa.parede[].cor e value=azul
O VRaptor vai montar uma Casa, com um List contendo 3 paredes
parede.cor=preto
parede.cor=amarelo
parede.cor=azul
Deu pra entender?
Abraços!
Sinceramente não.
Eu tenho um componente multiselect pronto:
<dl>
<dt><label>Serviços:</label></dt>
<dd><ef:combobox name="servicosSelecionados" campoChave="codigo" lista="${tipoServicoList}" id="servicos" clazz="large" multiplos="true" /></dd>
</dl>
achei que se eu colocasse no name:
name=entity.servicos
o vraptor iria dar conta do recado ... mas nao deu nao :(
se tipoServicoList for uma lista de enum, vc pode colocar o nome do select como entity.servicos[], que o VRaptor vai transformar na lista direitinho (desde que exista entity.setServicos(List<…>))
agora se não for uma enum, a lista deveria ser dos ids, então seria algo do tipo:
name=“entity.servicos[].id” e nos valores das options ${tipoServico.id}
eh taglib? vc tem o html gerado?
É uma lista de objetos normal… Na verdade é uma Lista de Interface onde possui três implementações: Professor, Aluno e Admin. Usei o ManyToAny para mapear a classe (outro problema… mas tenho que resolver uma coisa de cada vez)
Quer dizer que ele não pega e monta a lista automaticamente? Ele vai gerar uma lista de int com os ids da entidade?
Mas iai, o que eu faço com isso, sendo que no método eu recebo só o objeto que quero salvar? No caso “Mensagem mensagem” ?
Opa o HTML gerado é:
<select multiple="multiple"
id="destinatarios" name="entity.destinatarios" style=""
data-placeholder="Escolha um item..."
class="chosenizer large">
<option value=""></option>
<option value="1">professor</option>
<option value="1">aluno</option>
<option value="1">admin</option>
</select></dd>
</dl>
Acabei de ver outro erro… o value está como 1 para todas as entidades.
Olha o que eu costumo fazer, e pode ser qua haja um jeito melhor (dai o Lucas te fala),
É o Seguinte, ao clicar no botao submit voce faz uma function javascript que itera sobre o multiselect
E para cada option selected (voce pode fazer isso com jquery, daí nem precisaria de um loop para isso)
voce controi um input hidden com name=“entity.servicos[].id” e o value com o valor dos ids retirados das options (que estao todas iguais)
O que talvez de certo mas teria que testar é por dentro dos options esse input hidden… dai nao teria que fazer script…
Mas nao sei se funciona, pode ser que ele acabe passando a lista toda ou nenhum dos itens…
ahh…
o código está correto.
É pq cada código 1 representa uma entidade diferente.
alias, boa sorte em trabalhar com entidades polimorficas…
já tive altas tretas com isso… principalmente na persistencia…
se voce conseguir fazer algo legal me avisa!! de verdade mesmo…
abraços!
desculpa, mas acabei de desistir.
vou separar mesmo… eu tenho que fazer isto funcionar HOJE!
pouts… kkk pois é tive essa dificuldade tb…
quanto ao multi select conseguiu entender? O script seria algo assim…
function selecionaFuncionario(){
var rules = $("#granted_rules2 option");
var numeroRules = rules.length;
var inputs = '';
for(var i=0; i<numeroRules;i++){
inputs += '<input type="hidden" name="funcionario[].id" value="'+rules[i].value+'\"/>';
}
$("#inputs7").html(inputs);
}
Vou tentar fazer,
mas por favor, me explique novamente,
pq q eu preciso desse input hidden ?
O VRaptor vai pegar esses IDs que estão ‘escondidos’ e vai montar a lista?
O.o’
se está com os colchetes, o vraptor consegue transformar numa lista com o mesmo nome.
Ele vai pegar e montar os objetos a partir dos nomes dos inputs… (corrija-me se estiver errado Lucas!)
por exemplo vamos imaginar 3 inputs… (hidden só para nao sujar a pagina mas poderia ser text…)
name=entity.destinatarios[].id=1
name=entity.destinatarios[].id=2
name=entity.destinatarios[].id=3
o VRaptor vai instanciar um new Entity() e vai setar uma List (por isso tem que ter o seter)
e vai instanciar 3 new Destinatarios() e setar o id de cada um…
Lucas se o name do multiselect for entity.destinatarios[].id o vraptor nao faz automaticamente tudo isso que falei acima né?
se o name do multiselect for entity.destinatarios[].id vai funcionar sim, pq se vc selecionar 3 options, ele vai enviar 3 parametros na requisição com esse nome.
ummm bom saber… entao esqueça o script!! kkk
Valeu Lucas!!
legal…
boa observação…
iai lucas?
opa, desculpa nao tinha visto que ja tinha respondido…
vou testar e falo pra vcs galera.
abraçoss
vlw
aeeeeeeeeeeeeeeeee funcionou…
cara que lindo
que fácil adushashduhuasd
vlw demais cckncckn 
e Lucas Cavalcanti, obrigado também…
showw de bola…
tô feliz d+
asdhuasdhuashud
abraçãoo ae galera.
[RESOLVIDO]