[Dúvida] A4j:KeepAlive está se comportando como escopo session?!

7 respostas
J

Olá pessoal,

A priori eu uso: Jboss Dev + tom6 + rich + a4j + facelets + jsf
A fim de poder usar o escopo do meu back bean como request eu utilizo o <a4j:keepAlive beanName=“usuarioBean” /> logo depois do ui:composition.

O usuarioBean é utilizado pelo usuario_lista, usuario_editar e usuario deletar. Em minha _lista eu posso fazer uma pesquisa ao qual é mantido o ‘nome’ a ser pesquisado pelo ‘keep’.

O problema é que mesmo indo pra outra .xhtml (produto_lista, por exemplo) e depois eu retornar para usuario_lista, ele mantêm as informações como se estivesse o escopo fosse session.

Pelo que entendi do ‘keep’ mantém as informações do bean enqanto a página está sendo ‘requisitada’. Porém (pelo que entendi) caso eu requisite outra página ele ‘limpa’ as informações mantidas pelo meu ‘keep’.

Gostaria de saber de quem conhece bem a4j onde estou errando na utilização do a4j:KeepAlife.

Fico grato por qualquer ajuda.

Att. Jonny Marques
Vetor Informática

PS.: as páginas requisitadas são renderizadas:

<h:panelGroup id="conteudo">
	<a4j:outputPanel ajaxRendered="true">
		<ui:include src="#{ctr.link}.xhtml" />
	</a4j:outputPanel>
</h:panelGroup>

7 Respostas

L

Estou com exatamente o mesmo problema…
alguem tem alguma ideia?

Obrigado

abs!

J

Até que é bem útil ele fazer isso, contanto que não aloque memória como o session.
Se os dados ‘keepalive’ tiverem um tempo de vida, então é perfeito, pois vc pode usar o mesmo bean para várias páginas; tipo crud.
t+

alabeduarte

Bom pessoal, sou iniciante também em JSF e também estou com o mesmo problema.

No meu caso em especial, além de o managed bean reter o valor quando mudo de página, quando o usuario da logout do sistema, invalido a sessão, porém quando entro com outro usuário o managedbean que está como KeepAlive permanece com as informações anteriores

Alguém pode ajudar?

Desde já agradeço

Alabê Duarte

alabeduarte

Pessoal, resolvi o problema fazendo o seguinte:

implementei a interface java.io.Serializable no meu managed bean e no “KeepAlive” acrescentei:

<a4j:keepAlive beanName="#{meuBean}" ajaxOnly=“true”></a4j:keepAlive>

ou, pra quem utiliza keepAlive com Annotations faz assim:

@KeepAlive(ajaxOnly=true)
public class MeuBean …

N

Olá pessoal, gostaria de um help.
Tenho uma pagina jsp chamada pesquisarAutor que pesquisa os autores no banco e lista em uma h:dataTable na mesma tela conforme trecho de código:

<!-- demais código omitido -->
 <rich:panel rendered="#{!empty autorMB.autores}" styleClass="panel" headerClass="header">
     <f:facet name="header">
             <h:outputLabel value="#{msg.autoresCadastrados}"/>
     </f:facet>
     <h:dataTable value="#{autorMB.autores}" var="autor" headerClass="cabecalho" rowClasses="linha1,linha2" columnClasses="col1, col2, col3, col4">
                            <h:column>
                                <f:facet name="header"><h:outputText value="#{msg.codigo}"/></f:facet>
                                <h:outputText id="codigo" value="#{autor.id}"/>
                            </h:column>
                            <h:column>
                                <f:facet name="header"><h:outputText value="#{msg.nome}" /></f:facet>
                                <h:outputText id="nome" value="#{autor.nome}"/>
                            </h:column>
                            <h:column>
                                <f:facet name="header"><h:outputText value="#{msg.editar}" /></f:facet>
                                <h:commandLink value="#{msg.editar}" action="editarAutor"/>
                            </h:column>
                            <h:column>
                                <f:facet name="header"><h:outputText value="#{msg.excluir}" /></f:facet>
                                <h:commandLink value="#{msg.excluir}" action="#{autorMB.excluir}"
                                    onclick="return confirm('Deseja realmente excluir ?');">                                    
                                </h:commandLink>
                            </h:column>
                        </h:dataTable>
                </rich:panel>
            </a4j:form>
<!-- demais código omitido -->

Uma das colunas da linha eu tenho um h:commandLink para editar um autor. A sua action (action=“editarAutor”) chama a página editarAutor.jsp conforme o faces-config:

<navigation-case>            
            <from-outcome>editarAutor</from-outcome>
            <to-view-id>/editarAutor.jsp</to-view-id>
            <redirect/>
        </navigation-case>

A página é redirecionada e nela tento pegar os valores dessa forma:

<rich:panel styleClass="panel" headerClass="header">
        <f:facet name="header">
               <h:outputLabel value="#{msg.atualizaAutor}"/>
        </f:facet>
        <table width="70%" align="center">
           <tr>
                 <td>
                        <h:outputLabel styleClass="label" value="#{msg.codigo}"/>
                  </td>
                  <td>                                
                        <h:inputText size="10" value="#{autorMB.autor.id}" disabled="true">
                   </h:inputText></td>
           </tr>
           <tr>
                   <td><h:outputLabel styleClass="label" value="#{msg.nome}"/></td>
                   <td><h:inputText size="60" value="#{autorMB.autor.nome}"/></td>
           </tr>
           <tr>
                   <td colspan="2" align="center"><h:commandButton value="#{msg.salvar}" styleClass="button" action="#"/></td>
           </tr>
         </table>
     </rich:panel>
</a4j:form>

No faces-config defini o meu managedbean autorMB, e na minha classe tenho a propriedade autor do tipo classe Autor conforme código:

<managed-bean>
        <managed-bean-name>autorMB</managed-bean-name>
        <managed-bean-class>br.com.ppd.managedbean.AutorMB</managed-bean-class>
        <managed-bean-scope>request</managed-bean-scope>
    </managed-bean>
public class AutorMB implements Serializable{
    private Autor autor = new Autor();

    public Autor getAutor() { return autor; }

    public void setAutor(Autor autor) { 
        this.autor = autor;
    }
@Entity
@Table(name="autor", schema="ppd")
@SequenceGenerator(name="seq_autor", sequenceName="id")
public class Autor implements Serializable{

    @Id 
    @GeneratedValue(strategy=GenerationType.AUTO, generator="seq_autor")
    private Long id;

    @Column(name="descricao")
    private String nome;

A questão é que não consigo pegar o valor de id e nome de autor. Estou usando o <a4j:keepAlive beanName=“autorMB”/> para poder manter o valor de autorMB após o redirecionamento da página.
Alguém tem alguma sugestão?

Desde já agradeço.

F

Desculpem ressucitar o tópico, mas, já fiz várias pesquisas e não encontrei solução;

Estou usando Hibernate, JSF, Spring, na minha xhtml, tenho um dataTable q exibi os registro e tem os botões para Editar e Excluir, o problema é q quando coloco o escopo de request no Spring: @scope(“request”), os links da tabela não funcionam mais;

Tentei colocar o keepalive no xhtml, mas continua a mesma coisa, fiz como o colega Duarte disse acima, primeiro coloquei o @KeepAlive(ajaxOnly=true) e implementei a interface Serializable no MB, só q ai ele começa a apresentar uns erros de NotSerializableException quando vou abrir a página xhtml, primeiro deu a exceção para o DaoImp, implementei a serializable, depois deu a exceção no DataModel, nesse ponto parei de testar, pois não sabia onde colocar DataModel Serializável, enfim, tô como esse problemão e não tô conseguindo resolver, por isso vim aqui pedir a ajuda de vcs.

celiorp

Na verdade você está tentando recuperar os dados mas este não existe mais ? ou seja, o contrário dos posts acima ?
Bem, se sim, estou com esse problema. Na verdade é uma dúvida que tenho, não sei como se comporta o keepalive.
Utilizo mas quando vou buscar a info ela já não existe mais. ;-(
Ja tentei várias coisas mas nada.

Criado 6 de setembro de 2008
Ultima resposta 5 de jan. de 2011
Respostas 7
Participantes 6