Chamar um form de outro form

Boa Tarde!

Estou fazendo um CRUD com JSF, JPA e Primefaces.
Estou também no Eclipse com Java 7.

Tenho uma tela de consulta com um botão de alteração que leva para um outro form de alteração,
não estou usando Dialog.
Chamo o Form desta forma:

p:commandButton icon=“ui-icon-pencil” action=“departamento?faces-redirect=true”>
f:setPropertyActionListener value="#{departamento}" target="#{departamentoBean.departamento}" />
p:commandButton>
Funciona perfeito, carrega o form com os dados, eu altero e atualizo voltando para a tela de consulta em seguida.

O problema é que eu preciso fazer algumas validações antes de mostrar o formulario de alteração, e da forma como estou
chamando, eu debugei e ele vai direto para o form de alteração, não passa pelo meu ManagedBean, vai direto.
Tentei fazer a chamada assim:
p:commandButton icon=“ui-icon-pencil” action=“departamentoBean.editar”>
f:attribute name=“departamentoSelecionado” value="#{departamento}" />
/p:commandButton>
Mas aí acontece o seguinte, ele vai para o ManagedBean executa o código do Editar e fica parado lá, não vai para o form
de alteração. Alguém sabe me dizer o porque? o que estou fazendo de errado?

Meu ManagedBean:
public void alterar(ActionEvent evento) throws IOException {
departamento = (Departamento) evento.getComponent().getAttributes().get(“departamentoSelecionado”);

DepartamentoDao dao = new DepartamentoDao();
	
if (departamento.getDataAlteracao() == null)
	departamento.setDataAlteracao(new Date());
}

}

amigo use no commandButton

action="#{departamentoBean.editar()}"

esse metodo deve retornar uma String

no retorno vc retorna o nome da pagina para a navegaçao
Ex.
public String editar() {
fazcoisas…


return “departamento”;
}

Comesse a usar CDI em vez de ManagedBean tambem !!!

Colega, não prestei atenção no erro crasso que postei.
Mas enfim só funcionou desta forma:

public void alterar(ActionEvent evento) throws IOException {
departamento = (Departamento) evento.getComponent().getAttributes().get(“departamentoSelecionado”);

   if (departamento.getDataAlteracao() == null)
      departamento.setDataAlteracao(new Date());
	
   FacesContext.getCurrentInstance().getExternalContext().redirect("departamento.xhtml");
}

Fazendo como você disse, o metodo retornando uma string “departamento” não deu certo

E no xhtml tive que colocar actionListener que imagino ser o correto.

PS: Pelo pouco que sei da forma que vc mostrou é o correto, mas não sei porque return não está funcionando.

tente return “departamento.xhtml” funcionara con certeza …

use o metodo action mesmo com o return …

Bom dia!

Desculpe a demora, mas obrigado!