JSF - dúvida com Action [Resolvido]

6 respostas
G

Caros:

Estou começando a usar JSF, e estou com uma dúvida. Tenho todos as configurações corretamente funcionando - web.xml, faces-config.xml, e minha classe.

Pelo que pude entender, posso colocar um commandButton e através dele executucar, por um Action, um método da minha managed bean, que irá me retornar uma regra de navegação, como por exemplo:

<navigation-rule>
        <from-view-id>/loginEnterprise.jsp</from-view-id>
        <navigation-case>
            <from-outcome>Sucesso</from-outcome>
            <to-view-id>/sucessoLogin.jsp</to-view-id>
        </navigation-case>
        <navigation-case>
            <from-outcome>Erro</from-outcome>
            <to-view-id>/erroLogin.jsp</to-view-id>
        </navigation-case>
    </navigation-rule>

Porém, nesse caso, dependo do meu método da ManagedBean me fornecer um RETURN com o próximo passo da navegação.

Agora, se eu quiser criar uma action que não me leve a nenhuma página? Seria possível criar um <h:inputText value=“000001”/> e que, ao clicar no botão, ele fizesse a conexão no banco de dados e me retornasse todas as propriedades do meu managedbean, mas sem sair da minha página atual?

6 Respostas

pablouu

Sim, é só o seu método no MB retornar null, e no jsf 2.0 o método pode também ser void, assim ele vai retornar para a própria página.

Flavio_machine

retorna um null no método e não precisa declarar no managed bean

overkill

Vc pode criar um metodo no acrion que nao retorne nada void, e fazer ele alterar o conteudo em uma variavel que esta acessivel pelo seu managedBean ai quando alterar renderiza esse campo ! fica na mesma pagina e troca o valor.

andii.brunetta

use actionListener no lugar da action… o actionListener ignora o retorno e fica na mesma página!

Javabuntu

Não precisa do 2.0 pra conseguir fazer isso(action ligada a um método void)…

G

Caros:

Consegui em parte o que eu queria… criei um método void, que basicamente fazia o seguinte:

public void retornaCadastrado() {
        Configuracao novoCnf = this.getByCodigo("000001");

        this.setEmpresa(novoCnf.getEmpresa());
        ...outros SETs
    }

Com isso, garanti que toda chamada ao meu método populasse meu objeto com o conteúdo do objeto tratado por Código = “000001”.

Até aí, funcionou perfeitamente. Agora, queria que, ao clicar no botão:

<h:commandButton id="botaoCarrega" value="Login" action="#{configuracao.retornaCadastrado}" />

Ele sempre me retornasse o objeto do código 000001 na tela, de forma correta. Assim, posso exibir o conteúdo de qualquer item, como:

<label id="nomeEntidade"><h:outputText value="#{configuracao.empresa}"/></label>

e me mostraria o nome da empresa do local do label “nomeEntidade”.

O problema agora é o seguinte - como eu faço isso ser automático (basicamente, no onload do meu form)?

Fiz da seguinte forma:

<body onload ="carregaConf();">

A função carregaConf está abaixo:

function carregaConf() {
    document.getElementById('formDados:botaoCarrega').click();
}

Nesse caso, ele executa o click do botãoCarrega acima definido, fazendo a carga do objeto “000001” para mim.

Só que, após ele executar o click, como a página é recarregada, ele volta a executar novamente o onload da página, fazendo com que o conteúdo seja perdido…

Existe alguma forma de executar uma action de forma automática, apenas uma vez?

Criado 4 de janeiro de 2011
Ultima resposta 4 de jan. de 2011
Respostas 6
Participantes 6