last day (15 days later) » 

5:46 PM
1
Q: Como executar um método do back bean a partir de uma função JavaScript?

Eder F. FreitasEstou desenvolvendo uma página Web com canvas em HTML 5, nela será apresentado dashboards em tempo real, para isso uso ManagedBean para retornar os respectivos valores, tenho um componente desenvolvido em JavaScript com sua variável declarada como global, e a cada 3 segundos deveria ser atualizad...

 
@bfavaretto o #{mBeanTesteIsolado.teste} é uma expressão do Expression Language do JSF, não é template não, roda em server-side. Eder, está usando alguma biblioteca de componentes? No Primefaces você poderia usar um remoteCommand para executar um método do Bean a partir do Javascript.
Ele injeta uma propriedade ou retorno de método, ai depende do tipo ou tipo do retorno do teste.
@g.carvalho97, o client-side consegue invocar métodos do server-side sim. No caso ele executa uma requisição http (por Ajax ou Submit de form), o JSF interpreta (em suas fases) e chama o action, na quinta fase, correspondente no backing bean.
 
Senhores obrigado pelas respostas. O tipo do retorno do método teste é Integer, sim @Wakim, estou utilizando primefaces, preciso setar de tempos em tempos gráficos em JavaScript, a biblioteca SteelSeries, eu já havia pensando em usar o RemoteCommand, mas como isso se comportaria? Uma vez que as requisições devem ser feitas a cada cinco segundos mais ou menos, e o retorno do método deverá ser atribuído a uma função JS que seta o valor dos gráficos que estão em Canvas
 
Você pode usar um p:poll pra fazer chamadas com intervalos. Ou o próprio p:remoteCommand usando a serInterval do javascript.
 
@Wakim, vou testar aqui, posto o retorno mais tarde. Obrigado!
@Wakim, identifiquei mais um possível problema, meu objeto é declarado dentro das tags <script type="text/javascript">
 
Você precisa criar um javascript no facelets para chamar o que está dentro do script, talvez alterando-o.
Você pode colocar na sua pergunta mesmo, só formatar com 4 espaços.
Nesse caso você teria que usar o oncomplete do p:poll para atualizar esse objeto gauge. E ainda sim teria ter acesso a ele em outra função, talvez colocando como global ajude.
 
5:46 PM
@Wakim, agradeço pelo empenho em me responder, estou quase desistindo, pensando em criar um serviço em Rest para atualizar com o Ajax, assim como no Exemplo desert-home.com/2013/06/how-to-use-steelseries-gauges-with.html, fiz o que você citou, reformulei toda a questão praticamente, dê uma olhada por favor.
 
@EderF.Freitas você não pode usar a EL dentro do oncomplete
Você teria que usar o action e no final do action adicionar parametro pra função do oncomplete usando o RequestContext.addCallbackParam
 
Certo, no managedben eu retorno os respectivos valores com o RequestContext.addCallbackParam?
 
Isso, exato
 
No onComplete chamo a função JavaScript passando a variável do callback, isso?
 
Exato. O Primefaces passar por parametros algumas coisas
só preciso chegar a assinatura
 
5:52 PM
Certo, porque estou olhando no showcase não encontrei CallBack, tô dando uma googleada pra ver se eu acho
Achei um exemplo creia que seja isso:

<p:commandButton id="buttonId" update="buttonId, otherComponentId"
value="press me" process="@this" actionListener="#{homeController.myMethod}"
oncomplete="handleComplete(xhr, status, args)">
</p:commandButton>

function handleComplete(xhr, status, args){
var w = window.open();
w.document.open();
alert(xhr.responseText.substring(100));
alert(status);
alert(args);
var d = '<head></head><body>'+ args.firstParam +'<body>';
w.document.write(d);
w.document.close();
 
Isso, era isso que eu tava procurando
dentro do "args" vai vir todos os atributos que você passou pro RequestContext
usando o RequestContext.getInstance().addCallbackParam
ai você retorna o dado que quer do Managed Bean e recupera no JS
atualiazando o Gauge
 
Cara isso der certo vai ser uma mão na roda! Eu consegui implementar usando ajax e json, mas vai ser mais complexo, porque terei vários gráficos,
vou testar pra ver o que da
 
Eu usava muito isso quando usava um framework mvc
onde só chamava o Backing Bean pra executar uma ação e atualizava a View com o RequestContext
 
Interessante, o args é em format JSON?
 
objeto json
 
6:03 PM
Báh parece que agora não está executando o metdo do managed bean
<p:poll autoStart="true" listener="#{mBeanTesteIsolado.teste}" oncomplete="handleComplete(xhr, status, args)" interval="3" />
No console ele retorna Uncaught ReferenceError: $ is not defined teste.xhtml:8(anonymous function)
 
o erro não é ai não, não é no handleComplete?
 
Deixa eu ver
Deixei só a assinatura do método, o erro permanece, não identifica o $ na frente da fuction, é na geração do código do pool:

<script id="j_idt2:j_idt3_s" type="text/javascript">
$(function() {
PrimeFaces.cw("Poll", "widget_j_idt2_j_idt3", {
id: "j_idt2:j_idt3",
widgetVar: "widget_j_idt2_j_idt3",
frequency: 3,
autoStart: true,
fn: function() {
PrimeFaces.ab({
s: 'j_idt2:j_idt3',
f: 'j_idt2',
onco: function(xhr, status, args) {
handleComplete(xhr, status, args);
}
});
}
});
});
</script>
 
$ é jQuery, ele não está encontrando
 
6:19 PM
Cara bixo!
Deu certo,
estava faltando a tag head
Não consigo mandar imagens aqui né?
 
Show
Eu to na empresa =/ não posso ver imagens acho
 
qqr coisa tu ve outro dia, obrigadão cara, salvou minha vida, tava quase partindo pra ignorância HAHA
 
6:34 PM
Vou incluir uma resposta com isso ok?
 
Beleza
 

last day (15 days later) »