Que o JSF nao e perfeito todos sabemos mas se ha algo que me incomoda muito sao duas coisas chatas: URL amigaveis (que consegui resolver facilmente com PrettyFaces.) e tratar tudo como escopo de sessao (por falta de um escopo entre o requisicao e o sessao).Para o ultimo problema comecei a pesquisar algumas solucoes possiveis e cheguei ao framework MyFaces Orchestra.O MyFaces Orchestra e um framework que pode ser usado em aplicacoes web para prover as caracteristicas de escopo conversacional. Apesar de ter sido criado para ser um framework de escopo para web presentations ele tem, hoje, so implementacoes para JSF 1.1, 1.2 e 2.0.Para utilizar o framework voce precisa, obrigatoriamente, usar o Spring 2.0 (ou maior) como gerenciador de seus managed beans. E claro ter os modulos do Orchestra (core12 e o core15 sao os usados no exemplo) no seu classpath.ExemploFiz um exemplo utilizando Eclipse juntamente com quarteto fantastico : richfaces 3.3.3 + Facelets + spring 3.0.1 + hibernate 3.0.2 (JPA)! e tive que mudar/configurar os seguintes arquivos:web.xml <listener> <listener-class>org.apache.myfaces.orchestra.conversation.servlet.ConversationManagerSessionListener</listener-class> </listener>applicationContext.xml <import resource="classpath*:/META-INF/spring-orchestra-init.xml" /> <bean class="org.springframework.beans.factory.config.CustomScopeConfigurer"> <property name="scopes"> <map> <entry key="conversation.manual"> <bean class="org.apache.myfaces.orchestra.conversation.spring.SpringConversationScope"> <property name="timeout" value="30" /> <property name="lifetime" value="manual"/> </bean> </entry> <entry key="conversation.access"> <bean class="org.apache.myfaces.orchestra.conversation.spring.SpringConversationScope"> <property name="timeout" value="30" /> <property name="lifetime" value="access"/> </bean> </entry> </map> </property> </bean>Simplesmente apos ter feito tais mudancas e ter atendido aos requisitos basicos: declarei meu bean no applicationContext com scope="conversation.access". No exemplo naveguei de uma pagina listar.xhtml para outra editar.xhtml mantendo o estado! Fiz testes posteriores tambem com uso de Ajax (a4j) com multiplos requests para mesma pagina ou outra tudo passou perfeito!Se quiser ver o projeto baixe aqui o projeto (.war com sources)!Further Reading!O framework tambem fornece uma solucao (essa eu nao testei) para os lazy initializations lancados (esse com integracao forte ao hibernate). Ha tambem um esquema de binding muito legal.ps: todo o post esta levando em consideracao as caracteristicas do Jsf 1.x o Jsf 2.0 resolve alguns desses empecilhos.ps2: ainda ha algo que me incomoda e a quantidade de linhas no faces-config para lhe dar com navegacao entre as paginas.ps3: fiz testes basicos nesse projeto aconselho fazer mais testes reais na sua aplicacao antes de substituir session por conversation. Quando entrei na adolescencia, costumava perguntar a minha mae, o que machuca mais um coracao,Um amor nao correspondido, ou um relacionamento rompido? Ela nao soube me responder. Mas a verdade queridos, e que ambos significam rejeicao. A unica diferenca, e que um voce tinha a esperanca do SE... , e mesmo nao tendo sido, voce pode sonhar o quanto quis. Ja o outro, so lhe sobrou os pesadelos e as lagrimas. Nao, eu nao sinto borboletas no estomago quando te vejo; etambem nao fico toda tremula com o coracao disparado, e nao, eu nao fico rindocomo boba. E diferente... e sentir seguranca no seu sorriso, ver o medo dodesconhecido ir embora so porque voce deu aquela piscadinha, e nao ter medo de ser eu mesma quanto asminhas teorias, ideias e sentimentos, e, e e... e complicado explicar, simplesmentee.... Ou melhor, simplesmente SOU, quando estou ao seu lado! Pena que de agora em diante