Esse código não está perfeito (não meu, eu peguei emprestado de um amigo) mas deve funcionar. Se não funcionar é só postar ai q dou uma conferida nele. Ai na sua view é só se lembrar de adicionar o atributo “converter=“IndexedConverter”” nos seus h:selectOneMenu.
Lembre-se de q vc precisa ter um hashCode e um equals p/ cada uma das suas entidades. Ou o selectOneMenu pode nunca aceitar a sua entidade como um valor válido.
edysnipes
Valeu pelas dicas. Creio que irá resolver meu problema.
Só uma observação, @Model é um estereótipo do WELD (RI CDI da JBOSS) que anota a classe como @Named e @RequestScoped.
Olha só:
Notice the controller bean is request-scoped and named. Since this combination is so common in
web applications, there’s a built-in annotation for it in CDI that we could have used as a shorthand.
When the (stereotype) annotation @Model is declared on a class, it creates a request-scoped
and named bean.
Sim mas a anotação @Model é um esteriotipo p/ classes de modelo. Anotar um controller com @Model funciona mas não faz muito sentido.
edysnipes
Veja se estou certo!
As classes Controller para utilização do JSF 2.0 tem que ser anotada com @ManagedBean certo? Para utilizar com CDI temos que mudar para @Named. Tudo isso para poder fazer binding no JSP/XHTML certo? Já que é comum utilizar @Named com @RequestScoped tem-se o estereótipo @Model (javax.enterprise.inject.Model), certo?
Se eu estiver errado me corrija pois foi assim que entendi tudo isso até agora! Rsrrs
Abraço!
dev.rafael
Sim, vc está certo em dizer q anotar uma classe com @Model tem o mesmo efeito prático q anotar com @Named e @RequestScoped, mas isso não q é correto faze-lo. Segundo o padrão MVC, controllers e models tem finalidades diferentes na arquitetura de uma aplicação. Pense do seguinte modo, digamos q vc precise criar um classe p/ centralizar suas Queries e fazer a conversão dos dados relacionais p/ objetos do seu sistema (DAO). Vc daria à essa classe o nome de “Banana”? Na prática se vc chamar essa classe de “Banana” ela ainda vai funcionar mas pense no inferno q vai ser a vida do pobre coitado q tiver q dar manutenção no seu código tentando entender pq a droga da classe “Banana” parece fazer o trabalho de um DAO. Se ela vai funcionar como um DAO, não seria mais simples simplesmente chama-la de DAO?
edysnipes
Blz eu tinha entendido os conceitos. Mas eu vejo em palestras sobre CDI até mesmo do Pessoal da Caelum e na própria documentação do WELD, nos tutoriais e sempre utilizam esse conceito de @Model nos @managedBean. Isso porque para @Inject a classe Controller tem que estar anotado com @Named ao invés de @ManagedBean.
Mas se você está afirmando que é um erro utilizar @Model em classes Controller irei voltar a estudar novamente tudo porque creio que me enganei com alguma leitura.
Mas muito obrigado pela ajuda com o <h:selectItems e com os converter.
Abraço!
D
duanyrf
Na verdade edysnipes você é quem está correto! E nosso amigo dev.rafael se enganou (aliás, como ocorre com muitas pessoas devido a nomenclatura de @Model).
O @Model, neste caso, é apenas uma convenção de atalho que o pesoal do JBoss utiliza no Weld para facilitar a vida do desenvolvedor, já que a combinação @Named e @RequestScoped é uma das mais utilizadas. Convencionou-se, então, uní-las na anotação @Model.
Espero ter contribuido.