Melhor foma para utilizar ViewScope

Qual a melhor forma de utilizar o ViewScope?
Tenho uma tela de listagem e uma de cadastro. A de listagem leva tanto para a inclusão quanto para a edição. Sendo um bean para listagem e outro para o cadastro. Gostaria qual a melhor forma de passar informações de um bean a outro.

A forma é:

<h:commandButton value="Edit" action="edit-company.xhtml"> <f:param name="companyId" value="#{company.id}"/> </h:commandButton>

com

<f:metadata> <f:viewParam name="companyId" value="#{bean.company}" required="true" /> </f:metadata>

Ou há alguma forma melhor de fazer isso?

Desse modo aí com o parâmetro você não passa uma entidade, mas sim apenas parâmetros simples.

JSF Mini Livro - Dicas, conceitos e boas práticas Aqui explica como usar os escopos.

O melhor jeito de usar view scope em crud é com ajax chamando dialogs.

Caso queira mandar o objeto de um canto para o outro você pode usar o flash scoped.

Hubert obrigado!
A questão do ViewScope eu entendi o funcionamento.

Tenho mais uma duvida quanto ao Request. Tenho um MB para listagem e outro para Inclusão/Edição. Qual a melhor forma para eu tratar essa questão e edição no RequestScope, sendo que estou carregando a entidade no @PostConstruct? Desta forma se passo o id para carregar a entidade no @PostConstruct lista os dados, porém ao gravar a entidade fica null.

@ManagedProperty(value="#{param.idLocal}")
private Long id;

@PostConstruct
public void iniciar() {
System.out.println(“CRIAR!”);
if (id != null)
carregarParaEdicao(id);
}

O escopo de request funciona como o request http de servlet.

Uma vez que ele fez o que tinha que fazer os dados se perdem.