Solucionado (ver solução)
Solucionado
(ver solução)
2
respostas

Lista de Autores

Uma vez que eu tenho a lista de autores no comboBox não poderíamos, de alguma forma, aproveitar esses objetos, sem fazer outro select com o id do autor no método gravarAutor.

Esse select adicional é irrelevante ou essa questão é importante?

Seria possível passar o objeto autor, já carregado anteriomente no comBox, por parâmetro para o método gravarAutor?Ou isso podeira causar um nullPointerException em algum request/response? Isso seria uma pratica ruim?

2 respostas
solução!

Opa, blz Luiz? Compartilho da sua dúvida também, mas vamos lá, vou tentar explicar o pouco que sei e vamos trocando umas experiências.

Pelo que parece (e o pouco que já pesquisei) o response sempre é uma grande string contendo tudo que a página enviou para o servidor, mesmo que enviássemos o objeto, ele precisaria ser representado como uma string. Desta forma, passamos o ID e recuperamos no servidor novamente por não ter muita opção (não estou certo disso). Porém, tem como melhorar a escrita disso tudo e centralizar essa "recuperação" dentro de um converter e usarmos o converter na pagina sempre que precisarmos mandar o objeto, algo assim:

<h:selectOneMenu value="#{myBean.selectedItem}">
        <f:selectItems value="#{myBean.selectItems}" var="foo" itemLabel="#{foo.name}" itemValue="#{foo}"/>
        <f:converter converterId="fooConverter" />
</h:selectOneMenu>
<h:commandButton value="enviar" action="#{myBean.action}" />

esse converter vai anotado no faces-config e pode ser utilizado em qualquer pagina simplesmente citando o seu converterId.

Usei isso em diversos lugares já, onde no meu esquema criei um serviço genérico que usa reflections para decidir o que carregar baseado no ID e retornar, desta forma, tenho um único converter para qualquer bean que seja um @Entity do JPA.

Minha principal fonte é essa: Faces.Converter Dá uma olha no link que tem todos os códigos java e xml para fazer isso ai funcionar OK (caso ainda não conhecesse o lance de converter)

Como mencionei, compartilho da sua dúvida, mas atualmente resolvo-a assim :D

Carlos, muito obrigado pelas suas boas considerações. Acabei fazendo um converter também, porém não genérico, o que é uma boa ideia. Vou fazer também.

Acredito ser uma solução interessante e suficiente. Em termos de consumo de recursos, acredito não faça tanta diferença.