JSF - Perda das informações digitadas [RESOLVIDO]

5 respostas
ibispo

Olá colegas,

Creio que deve ser um problema bobo, mas estou com esse problema e gostaria da ajuda dos colegas.

Estou trabalhando com JSF 1.2, RichFaces 3.3.3, Facelets 1.4, Beans em escopo de request + <a4j:keepAlive>

cadastro.xhtml

&lt;a4j:keepAlive beanName="cadastroController" ajaxOnly="true"/&gt;

&lt;a4j:form id="frmCadastroCliente" binding="#{cadastroController.form}"&gt;

            &lt;h:outputLabel value="Informação adicional" /&gt;
            &lt;h:inputText id="txtInfoAdic" value="#{cadastroController.informacaoAdicional}"
                         size="40" maxlength="60"/&gt;

            &lt;h:outputLabel value="CPF" /&gt;
            &lt;h:inputText id="txtCPF" value="#{cadastroController.cliente.cpf}"
                         label="CPF do cliente"
                         size="13" maxlength="11" required="true"
                         requiredMessage="CPF obrigatório"&gt;
                &lt;f:validateLength minimum="11" maximum="11" /&gt;
                &lt;a4j:support event="onblur" ajaxSingle="true"
                             actionListener="#{cadastroController.pesquisaCliente}"/&gt;
            &lt;/h:inputText&gt;

            &lt;h:outputLabel value="Nome completo" /&gt;
            &lt;h:inputText id="txtNome" value="#{cadastroController.cliente.nome}"
                         size="40" maxlength="60"
                         required="true" requiredMessage="Nome do cliente obrigatório"/&gt;

... demais campos

&lt;/a4j:form&gt;

bean

public class CadastroController implements Serializable {

    private Cliente cliente;

    ...

    public void pesquisaCliente(ActionEvent e) {
        
        ... procedimentos de busca (Hibernate)

    }

}

No exemplo acima, quando digito a informação adicional, o CPF, e saio do campo (onblur), o sistema aciona a action de pesquisa. Quando retorna para tela, o CPF não perde, mas a informação adicional desaparece.

O <a4j:form binding> não faz nada. Eu até retirei mas o problema persiste.

Grato pela ajuda.

5 Respostas

Flavio_machine

O problema pode estar no seu maneged bean, vc deve estar limpado (informacaoAdicional="":wink: repare que ele não é uma propriedade do bean e o no bean vc não está limpando.

ibispo

Olá Flavio,

Valeu a resposta.

Desculpa - o campo ‘informacaoAdicional’ é da bean sim (eu esqueci de colocar no post)

O que é curioso é que quando eu debugo a Action de pesquisa do cliente depois de preencher o informacaoAdicional e o CPF

dentro do debug
o CPF tem valor
a informacaoAdicional está NULL

Flavio_machine
Então o ero está aqui

{cadastroController.informacaoAdicional}

desta forma está setando um propriedade do managedBean tipo uma string e não como o de baixo

que está setando uma propriedade de um bean que está no managedBean

{cadastroController.cliente.cpf}
ibispo
<blockquote><div class="quote-author">Flavio machine:</div>Então o ero está aqui

{cadastroController.informacaoAdicional}

desta forma está setando um propriedade do managedBean tipo uma string e não como o de baixo

que está setando uma propriedade de um bean que está no managedBean

{cadastroController.cliente.cpf}</blockquote>

Não entendi a informação acima.

Na bean, o atributo informacaoAdicional é privado da classe bean e possui seu get() e set() normalmente assim como o objeto cliente. Para testar, eu coloquei um valor qualquer para informacaoAdicional, quando a tela abre ele mostra o valor iniciado. Eu altero o valor e quando eu aciono a actionListener, ele volta o valor inicial.

Muito obrigado pela ajuda.

ibispo

Para ajudar os colegas,

Estava tudo certo. Eu tenho um menu.xhtml que aciono as rotinas:

&lt;rich:panel rendered="#{menuBean.rotinaCadastroCliente}" &gt;
                &lt;ui:include src="cadastroCliente.xhtml"/&gt;
            &lt;/rich:panel&gt;

            &lt;rich:panel rendered="#{menuBean.rotinaCadastroFornecedor}" &gt;
                &lt;ui:include src="cadastroFornecedor.xhtml"/&gt;
            &lt;/rich:panel&gt;

             ... outras rotinas

O meu problema é que circulei os acessos acima com <a4j:outputPanel> colocando ajaxRendered=“true”

Conclusão: Qualquer ação em qualquer tela ele renderizava automaticamente Que burrada! :? :? :? :? :?

Mas valeu a ajuda do Flávio.

Criado 15 de julho de 2011
Ultima resposta 15 de jul. de 2011
Respostas 5
Participantes 2