Olá ericktb.
Sim você pode utilizar o keep no EL dessa forma mesmo.
Se vc não conseguir utilizar o flash, outra idéia seria utilizar o mapa de parâmetros do escopo da sessão, que dura enquanto o usuário estiver com a sessão ativa. Então vc não passaria o objeto para o outro bean, mas sim o ID do seu objeto, e este outro bean trataria de receber o id no @PostConstruct e buscaria ele do seu BD/DAO/Negócio/etc para exibir na tela.
Ex (supondo que sua lista está em um dataTable):
Pagina da Lista
<h:commandLink value="Editar" action="listaBean.editar">
<f:param name="id" value="#{varObjeto.id}"/>
</h:commandLink>
ListaBean
public String editar()
{
//Pega o id do objeto enviado no click do link "Editar"
long id = Long.valueOf(FacesContext.getCurrentInstance().getExternalContext().getRequestParameterMap().get("id"));
//Insere o id no escopo de sessão
FacesContext.getCurrentInstance().getExternalContext().getSessionMap().put("meuObjetoId", id);
//Retorna o endereço da pagina de edicao para realizar a navegação...
return "/paginaEdicao?faces-redirect=true";
}
EdicaoBean
private Object meuObjeto;
/**
* Método executado na inicialização do Bean.
*/
@PostConstruct
public void inicializar()
{
try
{
if (FacesContext.getCurrentInstance().getExternalContext().getSessionMap().containsKey("meuObjetoId"))
{
//Recebe o ID informado
long id = Long.parseLong(FacesContext.getCurrentInstance().getExternalContext().getSessionMap().get("meuObjetoId").toString());
//Busca o objeto e preenche os valores na pagina
meuObjeto = DAO.buscarMeuObjeto(id);
//Remove o atributo da sessão para utilizar novamente.
FacesContext.getCurrentInstance().getExternalContext().getSessionMap().remove("meuObjetoId");
}
}
catch (Throwable ex)
{
//Tratamento de exceção...
}
}
//Getters and setters...
Espero ter ajudado!
Até +!
Edit 1:
Estive lendo sobre a flash do JSF 2, e me parece que é um pouco instável ainda. Por exemplo:
[list]Se vc estiver fazendo sua navegação entre os beans através de getApplication().getNavigationHandler().handleNavigation(), o valor da flash é limpado antes da hora (veja http://stackoverflow.com/questions/2874929/does-navigationhandler-handlenavigation-clear-the-flash).
[/list]
[list]Se vc estiver fazendo redirect entre páginas em diretórios diferentes, a flash não funciona também (veja http://stackoverflow.com/questions/9148798/object-in-flash-scope-is-not-available-after-redirect).
[/list]
Então, acho que poderia pensar em outro escopo.
Até +!