Jsf 2 + primefaces

oi galera,

estou tendo uma dificuldade ao fazer o botao “editar” de um cadastro.

Tenho uma lista, que ao clicar sobre o item da lista, o sistema deve redirecionar para tela de cadastro com todos os dados ja preenchidos.

Meu ManagedBean tem o produto, que ao ser selecionado no datatable é preenchido.

@ViewScoped
@ManagedBean
public class ProdutoController implements Serializable
{
     //refere-se a minha entidade Produto
     private Produto produto;

   //get e set omisso

 public String editar()
	{
		return "cadastro.xhtml?faces-redirect=true";
	}
}

Meu produto.xhtml

[code]<p:column>
<f:facet name=“header”>
<h:outputText value=“Editar” />
</f:facet>
<p:commandButton action="#{produtoController.editar}" ajax=“true” update="@all" process="@this" image=“ui-icon ui-icon-pencil”>
<f:setPropertyActionListener value="#{produto}" target="#{produtoController.produto}" />
</p:commandButton>

		    &lt;/p:column&gt;[/code]

Ao executar, ele sai da tela que lista o produto e redireciona certinho para tela de cadastro. O unico problema é que o cadastro vem todo em branco, como se fosse para cadastrar um produto novo.

E debugando o codigo, o produto está preenchido antes de ir para tela de cadastro.

Se a entidade produto está preenchida pelo que foi selecionado para editar, porque o formulario aparece em branco?

como teste, antes de ir para pagina, mandei printar o objeto no console…e esta vindo populado corretamente.

:shock: :?: :shock:

alguem ja viu isso?

Opa! Cara, passei por isso e que eu me lembre a única forma que funcionou na minha aplicação foi desabilitando o ajax do link de Editar.

No seu caso ficaria algo como:

<p:commandButton action="#{produtoController.editar}" ajax="false" image="ui-icon ui-icon-pencil">  
    <f:setPropertyActionListener value="#{produto}" target="#{produtoController.produto}" />    
</p:commandButton>  

Testa e se der certo avisa pra gente, abraço.

Você está usando o @ViewScoped que mantem o bean enquanto estiver na mesma tela, por isso quando vc seleciona, ele preenche o produto selecionado, porém quando ocorre o redirecionamento para uma pagina diferente da atual, um novo managed bean é criado, por isso o produto vem vazio. Para resolver você deve alterar o escopo do seu managed bean, ou alterar a forma da sua pagina, incluindo a edição na mesma.

Como o jaziel.rc falou, se você deixar o escopo como Request que é o padrão, e editando o registro na mesma página da lista, vai poder usar ajax sem problemas.

nossa Jaziel, fui pego pelo erro mais besta…de escopo. Era isso mesmo.

Frederico eu ja tinha tentando desabilitar o ajax. Mas porque o escopo tava View, não funcionava certo

valew galera

qual o scopo q vcs usaram??

eu to com o mesmo problema… só que meu ManagedBean ta com scopo padrão… :S

usei o sessionScoped. Por padrao do jsf é usado o requestScoped. Dai tem q ver sua necessidade