Bom galera, como faço pra pegar o valor dos checkbox checados no VRaptor?
Tenho uma relação Post NxM Category, e quando vou classificar os posts já quero selecionar quantas categorias for possivel.
Aproveitando a deixa, usando o hibernate(Criteria) nesse caso, como faço para listar as categorias que ainda não tem post e vice-versa?
public void foo(List<Category> categories) {
...
}
Lucas_Cavalcanti
Você pode fazer isso, que é um pouco feio, mas é o mais simples:
List<Category> categories = post.getCategories();
List<Long> categoriesIds = //transforma a lista para ids
session.createCriteria(Category.class)
.add(Restrictions.in("id", categoriesIds)).list();
Como eu disse eu ainda não testei, mais baseado na solução que vc me passou eu presumo que da forma acima de certo. Ou eu estou errado?
D
davisnog
Quanto a solução do hibernate eu prefiro a solução mais facil. Vou testar.
Uma pergunta, temos alguma diferença de performance quando utilizado Criteria ou HQL?
quanto à diferença de performance, depende da complexidade das queries que você criar…
para queries pequenas é irrelevante… para queries grandes, com vários subselects e joins,
talvez tenha alguma diferença sim, só não sei te dizer qual vai ser melhor… mas sem dúvida
hql é mais legível para queries grandes…
D
davisnog
Poderia dar um exemplo de como ficaria em HQL o que você passou em Criteria.
Lucas_Cavalcanti
session.createQuery("from Category c where c not in (:categories)").setParameterList("categories", post.getCategories()).list()
ou se vc não quiser chamar o getCategories do post:
session.createQuery("from Category c where c not in (select p.categories from Post p where p = :post)").setParameterList("post", post).list()
D
davisnog
nas duas situações, tanto HQL quanto criteria, as minhas coleções estando Lazy elas estarão null.
Dai como fica nessa situação?
D
davisnog
quanto ao hql deu certo, optei por ele por achar mais simular ao já conhecido sql e por ser mais facil de entender.
Agora quanto ao checkbox, fiz da forma que vc me falou e minha coleção que recebo como parâmetro vem sempre null.
<%@taglibprefix="fn"uri="...../functions"%><%@taglibprefix="c"uri="...../core"%>
...
<inputtype="checkbox"....<c:iftest="${fn:contains(service, cara.services)}">checked="checked"
</c:if>/><!-- fechando a tag do checkbox -->
eu provavelmente estou errando alguma ordem, mas acho que isso funciona…
[]'s
D
davisnog
opa show de bola até aqui tudo certo.
Agora como faço pra pegar o valor de um só checkbox, no caso tenho um que diz que situação ativo/inativo?
Lucas_Cavalcanti
<inputtype="checkbox"....<c:iftest="${ativo}">checked="checked"</c:if>/><!-- fechando a tag do checkbox -->
D
davisnog
Pelo que eu entendi dessa forma eu chegaria o checkbox na hora de editar, mais a minha pergunta seria no momento do insert, pois mesmo o checkbox estando checado o valor sempre esta como false.
Lucas_Cavalcanti
se vc tem a classe:
publicclassUsuario{privatebooleanativo;//getters e setters}
e no método do controller:
public void adiciona(Usuario usuario){...}
é só colocar no checkbox:
<inputtype="checkbox"name="usuario.ativo"/>
que deve funcionar… se não funcionar, coloca value=“true” também