onde deveriam aparecem selecionados os checkboxs com os perfis correspondentes do usuário a ser editado.
Porém está acontecendo que não seleciona corretamente os perfis do usuário selecionado. Por exemplo, tenho 3 perfis diferente no sistema. Cadastro um novo usuário com 2 perfis. Mas quando vou edita-lo aparece apenas 1 checkbox selecionado. No banco de dados está salvando normalmente.
Eu faria essa seleção depois com javascript. Do jeito que está, o código fica meio poluído.
Você pode alterar o toString de uma regra para que você consiga converter ela em um array na JSP e manipulá-la no javascript:
publicclassRegra{privatelongid;privateStringname;publicStringtoString(){return"{id: '"+this.getId()+"', name:'"+this.getName()+"'}";// repara que o valor do ID e o valor do name estão com aspas simples (') para transformá-los em String no javascript.}// getters e setters}
Assim, vamos supor que você tem uma lista com 3 regras:
// esboço da ideia dos valores.regra1:id=1name="xpto"regra2:id=2name="abcde"regra3:id=3name="1 2 3 de Oliveira 4"
Com isso, será gerado a seguinte saída no .toString() da lista de regras:
Dessa forma, você tem um array de objetos no javascript.
ou seja, vc tá testando que se a regra do usuário do índice X é igual à regra atual… vc deveria ver se a regra atual está dentro da lista de regras do usuário…
se vc usar a taglib fn dá pra tentar fazer:
<c:iftest="${fn:contains(usuario.regras,regra)}">
ou algo do tipo.
Rafael_Guerreiro
Checar os checks para você baseado em uma lista? Não. Ele consegue é gerar um JSON para que a gente possa usar no JavaScript. É bem legal, mas não atende muito bem à esse seu caso…
O ideal é você deixar o javascript em um arquivo JS separado:
É ainda melhor se você colocá-los dentro de um bloco de função do jQuery:
// Assim o jQuery guarda essas instruções para serem executadas somente quando a página carrega, ou seja, não haverão JS atrasando o carregamento da página. Dando a impressão de que ela é mais rápida.$(document).ready(function(){$(selecteds).each(function(){$('input[type=checkbox][value='+this.id+']').attr('checked',true);});});
ou seja, vc tá testando que se a regra do usuário do índice X é igual à regra atual… vc deveria ver se a regra atual está dentro da lista de regras do usuário…
se vc usar a taglib fn dá pra tentar fazer:
<c:iftest="${fn:contains(usuario.regras,regra)}">
ou algo do tipo.
Cara, não conhecia esta função da taglib! Muito bom! Desta forma funcionou sim!
Wendell_Albino
Rafael Guerreiro:
Checar os checks para você baseado em uma lista? Não. Ele consegue é gerar um JSON para que a gente possa usar no JavaScript. É bem legal, mas não atende muito bem à esse seu caso…
O ideal é você deixar o javascript em um arquivo JS separado:
É ainda melhor se você colocá-los dentro de um bloco de função do jQuery:
// Assim o jQuery guarda essas instruções para serem executadas somente quando a página carrega, ou seja, não haverão JS atrasando o carregamento da página. Dando a impressão de que ela é mais rápida.
$(document).ready(function(){
$(selecteds).each(function(){
$('input[type=checkbox][value=' + this.id + ']').attr('checked', true);
});
});
Obrigado pela explicação! O melhor é deixar o código bem organizado mesmo.