Buenas.
Eu queria fazer algo simples, porém está dando mta dor de cabeça.
tenho um datagrid que carrega Chamados. ok.
eu gostaria de editar um chamado
Quando eu clico em editar, o chamado aparece belezinha lá na outra página, porém, se eu quero adicionar uma informação, como eu faço isso sem precisar colocar um monte de hiddenInput? é pq nessa página o usuario vai digitar uma Solucao pro chamado apenas, e setar um boolean fechamentoSolicitado.
colocando inputhidden ele até deve funcionar, mas tá dando pau em conversores e etc, queria apenas pegar essa instancia de Chamado, adicionar as informacoes e deu.
meu botao de editar:
<p:commandButton value="Editar"
action="#{chamadoBean.editar}" ajax="false">
<f:setPropertyActionListener target="#{chamadoBean.chamado}"
value="#{chamado}" />
</p:commandButton>
cara,
nao precisa vc colocar inputHidden nao, so vc setar o objeto chamado como vc ta fazendo no setPropertyActionListener e pronto. nao entendi qual seu problema.
t+
dai ele salva um novo chamado!
olha meu bean, tá comentado
[code]public String salvarSolucao() {
this.chamado.setFechamentoSolicitado(true); //regra pra setar um boolean
ChamadoRN chaRN = new ChamadoRN();
chaRN.salvar(this.chamado); // ele interpreta o this.chamado como sendo um chamado novo, e nao o apresentado na tela, por isso ta salvando um novo
return "solucao";
}[/code]
olha, eu troquei o scope do meu bean pra session e funcionou, mas não sei se isso é uma gambiarra ?
Olha amigo se você utilizou o escopo session não significa que é uma gambiarra cada escopo tem sua função o session significa que vc vai manter este objeto na sessao e quando vc manda editar ele ainda esta lá por isso nao cria novamente.
se utilizar outro tipo de escopo vc precisaria antes de alterar buscar o objeto correspondente no banco. creio eu.
como eu faço isso com o escopo request?
bom a forma que vejo é vc indo no banco buscar o objeto que quer alterar e setando este objeto no seu bean
use a tag [quote]<p:commandButton value=“Editar”
action="#{chamadoBean.editar}" ajax=“false”>
<f:setPropertyActionListener target="#{chamadoBean.chamado}"
value="#{chamado}" />
</p:commandButton>[/quote]
neste metodo que vc usa Editar ele retorna o que ? um chamado ? é o chamado que vc quer editar ?
poste a o metodo pra poder enteder e tentar ajudar !
mais creio que se vc recuperar o objeto antes do banco e setando-o no bean atraves do setProperty creio que irá funcionar.
request trabalha com requisição pois entao se vc quer fazer uma nova requisição tera que buscar o objeto manualmente no banco para altera-ló.
ok, eu faço isso mesmo.
só que na página seguinte (de editar) ele mostra os dados do chamado que eu enviei, porém ele sai do escopo, ou seja, ele sai do Bean. Não consigo mais pegar o chamado pelo this.chamado no bean.
dai se eu quiser alterar UMA propriedade apenas, o resto tenho que popular com os inputHidden de todos os atributos que tem na classe, entende? pq o objeto não tá mais no bean, dai tenho que setar na mão… mas é mto ruim isso… imagina se a classe muda? tenho que mudar todas as páginas ? hehehe
bom acho que session e a unica solução entao! ;/
Realmente, ao fazer o f:setPropertyActionListener ele “joga” o objeto para a próxima pagina e com isso o objeto é eliminado.
O que você tem que fazer é o hidden, ou então, vc guarda apenas o id como hidden e na hora de editar, vc busca o objeto do banco e altera.
Seria tipo:
Carro carro = carroDAO.find(Carro.class, carroDaTela.getId());
//agora rola o edit na unha
carro.setNome(carroDaTela.getNome());
Desse modo, você não vai perder informação.