Executar método JSF ao submeter form html comum

Olá, amigos do forum.

Seria essa uma duvida basica?Até creio (e espero) que seja, mas o fato é que nao estou conseguindo resolver…

Tenho a necessidade de enviar os dados da minha aplicação para uma URL externa. Não vi como poderia submeter um form do JSF para uma url de fora da aplicação, mas de qualquer forma o HTML clássico resolve:

<form action="http://www.siteexterno.com.br" method="POST">
   <!--varios inputHidden aqui.. -->
</form>

Surgiu a necessidade de executarmos um método do managedbean NO MOMENTO EM QUE O FORM É SUBMETIDO. Mas…sendo um form comum, do html, não consegui uma maneira de fazer isso.

Alguma ideia, amigos?Ou alguma outra maneira de submeter esse form?

OBRIGADO!

Cria uma requisição ajax, que invoque uma jsf e então o método será executado.

Perdoe a ignorancia, meu amigo, mas de que forma exatamente o sr sugere que isso seja feito?

Eu havia tentado usar o a4j:jsScript, que faz mais ou menos o que voce comentou, mas nao rolou…

Valeu, velho.

Fiquei confuso com a coisa toda…
Qual é sua pergunta?

Então, acho que nem precisa de ajax, um simples javascript funciona. Não sei o que a aplicação faz após o submit, mas imagino que não haverá problema, colocar no evento onSubmit, um location.href para a jsf que contenha o método a ser executado.

[quote=FernandoFranzini]Fiquei confuso com a coisa toda…
Qual é sua pergunta?[/quote]

Obrigado, amigo. O meu problema é nao estar conseguindo invocar um método JSF, do managed bean, a partir do onsubmit do formulario…

Se eu colocar um location.href, a janela será redirecionada para o que eu colocar nesse cara?O que acontecerá com a url no atributo action do form?

Ah, é, não comentei que o metodo na verdade está na mesma pagina… :lol:

Bem, pode não ser a melhor solução, mas é a que eu visualizo como possível.
Será, mas você pode apontar para a própria jsf que está rodando.

Eu ja fiz isso de 2 formas diferentes:

  1. Expondo uma ação do managedBean no JavaScript via a4j:
    <a4j:jsFunction name=“nomeDaFuncaoJs” action="#{managedbean.acao}"/>
    Vale lembrar que:
  • Isso vai criar um protótipo de função JS visivel globalmente no qual vc pode chamar em qualquer DHTML válido de uma página.
  • Esse mecanismo só vai criar um ponto de invocação managed bean (ciclo de vida do JSF) não tendo como enviar os parâmetros de campos localizados dentro form HTML para o JSF.
  1. Uma vez usei o framework DWR integrado com JSF. O dwr expõe no JavaScript chamadas para objetos POJO Java fazendo uma espécie de RPC (Ajax) e é possível integrar ele com JSF no qual vc chama os metidos dos managed beans passando pelo ciclo de vida JSF.
    DWR - http://directwebremoting.org/dwr/index.html
    DWR com JSF - http://directwebremoting.org/dwr/documentation/server/integration/jsf.html

[quote=FernandoFranzini]Eu ja fiz isso de 2 formas diferentes:

  1. Expondo uma ação do managedBean no JavaScript via a4j:
    <a4j:jsFunction name=“nomeDaFuncaoJs” action="#{managedbean.acao}"/>
    Vale lembrar que:
  • Isso vai criar um protótipo de função JS visivel globalmente no qual vc pode chamar em qualquer DHTML válido de uma página.
  • Esse mecanismo só vai criar um ponto de invocação managed bean (ciclo de vida do JSF) não tendo como enviar os parâmetros de campos localizados dentro form HTML para o JSF.
  1. Uma vez usei o framework DWR integrado com JSF. O dwr expõe no JavaScript chamadas para objetos POJO Java fazendo uma espécie de RPC (Ajax) e é possível integrar ele com JSF no qual vc chama os metidos dos managed beans passando pelo ciclo de vida JSF.
    DWR - http://directwebremoting.org/dwr/index.html
    DWR com JSF - http://directwebremoting.org/dwr/documentation/server/integration/jsf.html[/quote]

Valeu, pessoal. Obrigado mesmo.

Eu tentei o a4j:jsFunction, mas nao rolou. Embora no mesmo projeto eu utilize esse componente em outros locais, devo ter feito algo errado :lol:…vou tentar novamente.

Não gostaria de colocar o DWR nesse momento do projeto, mas eu utilizo o Jboss Seam…li a sua resposta e dei uma procurada na doc do Seam, e tem um recurso semelhante ao do DWR! Vou pesquisar e tentar implementar, e se deus quiser meter um RESOLVIDO no topico, …valeu pessoal, brigado mesmo

Resolvi a situação com o a4j:jsFunction, como o colega recomendou.

Não havia funcionado na minha tentativa anterior, pois a tag nao estava envolta em um a4j:form. Incluindo esse detalhe, funcionou!

Obrigado, pessoal.