Jsf 2 + primefaces

6 respostas
J

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
<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>
			            
			    </p:column>

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?

6 Respostas

fredericomaia10

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.

J

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.

fredericomaia10

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.

J

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

alandiniz

qual o scopo q vcs usaram??

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

J

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

Criado 19 de setembro de 2011
Ultima resposta 17 de out. de 2011
Respostas 6
Participantes 4