[RESOLVIDO]Richfaces: CommandLink não atualiza form

Olá pessoal,

Gostaria da ajuda de vocês com o seguinte problema:
Tenho um form com 4 inputText’s e abaixo desse form há um dataTable que mostra os dados que foram cadastrados pelo form. Para cada linha do dataTable há um commandLink para EDITAR o registro conforme abaixo:

Declaração do dataTable:

<rich:dataTable value="#{apontamentosBean.todosApontamentos}" var="item" rendered="#{not empty apontamentosBean.todosApontamentos}"
width="790px" 
onRowMouseOver="this.style.backgroundColor='#B5F3FB'"
onRowMouseOut="this.style.backgroundColor='#{a4jSkin.rowBackgroundColor}'">

Declaração do commandLink

<h:commandLink action="#{apontamentosBean.editar}" immediate="true">
    <f:setPropertyActionListener value="#{item}" target="#{apontamentosBean.apontamento}" />
    <h:graphicImage value="/img/edit.png" title="Editar" style="border: none;" />
</h:commandLink>

Tanto os inputFields quanto o dataTable estão no mesmo form. Os values dos inputFields estão com os valores de apontamentosBean.apontamento (apontamento é uma classe dentro do Bean apontamentosBean).

Meu problema é: Quando clico em editar, mesmo com o immediate="true", os valores não aparecem no form.

Espero ter sido claro. Se precisarem de mais informações me avisem.

Abraços.

Já tentou colocar assim:

<h:commandLink action="#{apontamentosBean.editar}" immediate="true" rerender="ID_DO_FORM"> 
    <f:setPropertyActionListener value="#{item}" target="#{apontamentosBean.apontamento}" />  
    <h:graphicImage value="/img/edit.png" title="Editar" style="border: none;" />  
</h:commandLink>

Acho que a propriedade é assim: rerender

Fala Wagner,

Já tentei utilizar o reRender porem mesmo assim não funciona. Acho que em alguma fase do cliclo de vida do JSF a classe perde seus valores.

Meu bean esta em escopo de SESSION também, o que fica mais estranho. hehe.

Obrigado!

já tentou dar um refresh nos campos do form, apos a ação do botão editar, utilizando a propriedade “binding”?

Amigo, faça um teste:
Retire o rendered="#{not empty apontamentosBean.todosApontamentos}" do seu table. E posta se deu certo, por favor.

Não sei se é o seu caso, mas em alguns testes com ajax, já me deparei com uma situação semelhante: commandLinks ou commandButtons gerados em requisição ajax, não “funcionam”.

prymatta,
Binding ou Value nos campos não resolveram. No metodo “editar”(associado no actionListener do commandLink) mandei alguns println e puder perceber que a classe apontamentosBean.apontamento possui valor! Acho que depois disso ta rolando algo que muda o valor da classe.

Wagner, fiz o teste que voce mencionou mas não houveram mudanças.

Tentarei fazer mais alguns testes aqui.

Obrigado pessoal.

tire o immediate=true do seu link que deve funcionar.

lgweb,

Não posso retirar o immediate=“true” pois tenho Validators nos meus inputTexts. Esqueci de mencionar isso. Então se retiro o immediate, as validações aparecem.

Abs.

Acredito que com o immediate=true nao va setar os valores, pois o mesmo pula algumas fases do Jsf, em vez de passar o valor via propertyActionListener pq nao pega o valor via model.getRowData() no seu bean?

lgweb,
É uma opção tambem! Porem mesmo com immediate=true ele seta os valores.
Eu descobri o que faltava.

Vejam como era o metodo editar do meu Bean:

	public String editar(){
		System.out.println(this.apontamento.getId());
		System.out.println("Editar");
		return null;
	}

O problema era no return null. Criei um navigation-rule no meu xml de context:

<navigation-rule>
	<navigation-case>
		<from-outcome>index</from-outcome>
		<to-view-id>index.jsp</to-view-id>
	</navigation-case>
</navigation-rule>

E alterei o metodo editar para fazer return “index”

public String editar(){
	System.out.println(this.apontamento.getId());
	System.out.println("Editar");
	return "index";
}

Acredito que o model.getRowData() funcionaria também. Mas assim a alteração foi menor.

Obrigado pela ajuda!