commandButton não chama action

Tenho um form com o escopo de sessão:

<managed-bean>
   <description>formCidade</description>
   <managed-bean-name>formCidade</managed-bean-name>
   <managed-bean-class>com.xxx.form.FormCidade</managed-bean-class>
   <managed-bean-scope>session</managed-bean-scope>
</managed-bean> 

e uma datable no jsp que mostra os resultados de uma consulta, e para cada registro, um botão editar (que seta no formCidade a cidade a ser editada)

<t:dataTable id="cidades" styleClass="gridBusca" value="#{formCidade.cidades}" var="cidade"
   columnClasses="descricao,sigla,estado,editar" width="550">
   <t:column>
      <f:facet name="header">
         <h:outputText value="Cidade" />
      </f:facet>
      <h:outputText value="#{cidade.descricao}" />
   </t:column>
   <t:column styleClass="semBorda">
      <f:facet name="header">
         <h:outputText value="Ações" />
      </f:facet>
      <t:commandButton styleClass="submit" type="submit" action="#{formCidade.editar}"
         value="Editar" title="Editar" />         
   </t:column>
</t:dataTable> 

tudo funcionando 100%… aí precisei mudar o escopo do form para request…
fiz algumas modificações (gravar alguns dados na sessão) e (quase) tudo funcionou bem…
depois de trocar para request, este commandButton ‘Editar’ não chama mais o método editar do formCidade
ao clicar no botão é chamado apenas o construtor do formCidade mas o método editar não é chamado em seguida.

Notas:

1 - estou utilizando:
myfaces-api-1.1.4.jar
myfaces-impl-1.1.4.jar
tomahawk-1.1.3.jar

2 - eu já tentei trocar os componentes do tomahawk (t) pelos outros (h)
mas não adiantou

3 - tentei com commandLink… tb não funcionou

4 - o método editar é público, retorna String, e não leva parâmetros

5 - os outros botões, como o de consulta, que estão fora da datable funcionam normalmente…

6 - Tentei com immediate=“true” tb nao deu… =/

até onde eu sei… se eu tiver uma datable com value="#{formCidade.cidades}" var=“cidade”, e colocar um commandButton para cara registro, ao clicar em um botão (de um determinado registro) o jsf automaticamente coloca a entidade daquela linha como um atributo na request, com o nome da propriedade var (no caso “cidade”)

será que ele esta tentando fazer isso, e (por algum motivo) não esta conseguindo ? Rolling Eyes

gracias

Tenta colocar o commandButton fora do data table

mas essa é a questão… eu coloco ele no datatable por que eu uso a entidade correspondente a linha do botão chamado para ser editada:

cidade = (Cidade) super.getRequestMap().get("cidade");

mas acabei de resolver o problema…
como eu mudei o escopo do form de session para request, o seguinte acontece:
eu informo os dados da busca, e dou um submit no form
é executada a action “busca” do form, e os dados são retornados e apresentados
essa instância do form então é descartada (acabou o seu ciclo de vida)…
ao clicar no botão editar, o form que possuia a lista de cidades já não existe mais…
depois do construtor do FormCidade ser invocado, o método getCidades era chamado para buscar a cidade a ser passada por parâmetro na request, para depois chamar o método editar… mas o getCidades retornava null…

o problema é que não acontece exception, não aparece nada com um h:messages… eu cheguei a colocar o log4j e coloquei o nivel de detalhes DEBUG… não aparecia nada…

então eu achei num fórum (não lembro aonde) um cara com o mesmo problema… e um outro disse para usar preserveDataModel=“true” na datatable… e funcionou
mas ainda não li mto sobre o que realmente muda com esse preserveDataModel

valews