Pessoal, bom dia.
Alguém sabe como que eu faço para executar um método javascript dentro do meu método java?
Att.
Camilo Oscar
Pessoal, bom dia.
Alguém sabe como que eu faço para executar um método javascript dentro do meu método java?
Att.
Camilo Oscar
Cuma?
[quote=camilooscar]Pessoal, bom dia.
Alguém sabe como que eu faço para executar um método javascript dentro do meu método java?
Att.
Camilo Oscar[/quote]1) Not possible.
2) Pra q? O.o
Estou criando minhas xhtml dinâmicas, onde os campos que vão aparecer na tela estão no banco. Então na minha xhtml tenho só meu panelgrid e via java, instancio os campos (label, input, combo, button…)
Quando eu clico no button, eu chamo uma action, segue abaixo:
UICommand button = new UICommand();
button.setValue("Pesquisar");
MethodBinding action = application.createMethodBinding("#{criarCotacaoController.teste}", null);
button.setAction(action);
dentro deste meu método teste, eu tenho que abrir um pop up, com uma outra página xhtml. Pensei em fazer isto via JS, mas está dando erro de compilação… segue a idéia abaixo:
public voidteste() {
<script language="JavaScript">
function abrir("pagina") {
var width = 400;
var height = 250;
var left = 99;
var top = 99;
window.open(URL,'janela', 'width='+width+', height='+height+', top='+top+', left='+left+', scrollbars=yes, status=no, toolbar=no, location=no, directories=no, menubar=no, resizable=no, fullscreen=no');
}
</script>
}
Preciso dentro deste método teste, chamar um JS para abrir este popup.
Cara, isso não vai funcionar… apesar do nome ser parecido, são dois mundos diferentes.
O JavaScript tem que ficar do lado do client, você vai ter que achar uma outra forma, que vai depender de o que você estiver usando para montar a View.
Rodrigo Sasaki, beleza?
Eu sei que são dois mundos diferentes hehehe. Tem idéia de como posso fazer isto?
Att.
Camilo Oscar
[quote=camilooscar]Rodrigo Sasaki, beleza?
Eu sei que são dois mundos diferentes hehehe. Tem idéia de como posso fazer isto?
Att.
Camilo Oscar[/quote]
Esse button que você clica… Ele está na view, correto?
Não tem como deixar o JS lá ?
Sim ele está na view.
Ele é criado pelo metodo java, mas eu “embuto” ele no meu panelgrid, que está na view.
Posso deixar este popup na view sim, mas como vou chamá-lo via java? Segue o que eu tenho na minha xhtml:
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml"
xmlns:ui="http://java.sun.com/jsf/facelets"
xmlns:h="http://java.sun.com/jsf/html"
xmlns:f="http://java.sun.com/jsf/core"
xmlns:p="http://primefaces.org/ui">
<ui:composition template="Create.xhtml">
<ui:define name="body">
<h:form>
<p:growl id="msg" showDetail="false" escape="false" />
<h:panelGrid id="gridImpressao" binding="#{criarCotacaoController.impressaoContainer}" columns="6"/>
<p:separator />
<h:outputLabel value="#{msgs.web_campos_complementares}:" rendered="#{criarCotacaoController.habilitaSeparatorImpressaoSecundario}" style="margin-left:5px; font-size: 85%;" />
<h:panelGrid id="gridImpressaoSecundaria" binding="#{criarCotacaoController.impressaoContainerSecundario}" columns="4" rendered="#{criarCotacaoController.habilitaSeparatorImpressaoSecundario}"/>
<p:separator rendered="#{criarCotacaoController.habilitaSeparatorImpressaoSecundario}" />
<p:panelGrid styleClass="semBorda" columns="1">
<p:commandButton id="btn_criar_cotacao_print" styleClass="btn_cotacao_impressao"
value="#{msgs.btn_ok}" ajax="false" action="#{criarCotacaoController.salvarModuloImpressao}"
/>
</p:panelGrid>
<br />
</h:form>
</ui:define>
</ui:composition>
</html>
Neste panelgrid:
<h:panelGrid id="gridImpressao" binding="#{criarCotacaoController.impressaoContainer}" columns="6"/>
que eu vou “embutindo” meus componentes dinamicamente, via código Java.
teoricamente, se você souber qual o id que o popup vai ter quando ele for “embutido” consegue invocá-lo com um JS na página.
Eu sei qual será o id deste popup. Como faço para chamá-lo?
colocando o javascript na página, e invocando ele no botão, por um evento onclick ou algo parecido.
Você conseguiria se:
Utilizasse alguma forma de escrita na página que permitisse que, ao ser interpretado pelo compilador java, ocorresse a geração do código de forma automática, tanto o html, quanto o javascript.
Isso é possível em Servlet e JSP.
Para o xhtml, onde os componentes definem o conteúdo a ser gerado, isso não teria funcionalidade.
O que o Rodrigo está dizendo é que, independente de como os elementos serão postos em página, o javascript já precisa existir, para que funcione.
O java script pode existir no meu xhtml, não tem problema ele estar lá.
Mas como vou chamá-lo a partir da classe java?
quando crio meu botão (código abaixo):
UICommand button = new UICommand();
button.setValue("Pesquisar");
MethodBinding action = application.createMethodBinding("#{criarCotacaoController.teste}", null);
button.setAction(action);
panelgrid.getChildren().add(button);
Não tenho acesso ao onclick, via classe Java. Somente tenho acesso ao action e actionlistener…então precisaria chamar o JS que está na xhtml…mas a dúvida é, como chamar.
Você está confundindo as coisas.
Os eventos onclick, onmouseover, onblur devem ser disparados pelo usuário, no browser e não pelo java. Se é para disparar pelo java, deve ser o método da classe.
Enfim, você pode tentar fazer o seguinte, após o local onde o novo elemento é inserido, coloque um trecho script, invocando o método que ele deve disparar, verificando, lógico, se ele já existe:
<script>
if(document.getElementById('idDoElemento') != null &&
document.getElementById('idDoElemento') != 'undefined'){
chamaFuncaoQueDeveriaSerDisparadaPeloElemento();
}
</script>
P.S.: Não sei se a comparação com undefined é assim mesmo e estou com preguiça de testar.
Este Script deve ficar na xhtml ou no java? não entendi
xhtml
Como voce esta usando primefaces, voce pode executar um comando javaScript através do java sim, apesar de não ser muito recomendado.
// No metodo execute(String arg0), voce passa o comando que quer executar.
org.primefaces.context.RequestContext.getCurrentInstance().execute("alert ('Este alert em JS é chamado em um método Java!');");
// No seu caso, como voce quer executar o metodo voidteste(), voce pode fazer o seguinte:
org.primefaces.context.RequestContext.getCurrentInstance().execute("voidteste()");
button.setOnclick("javascript:function abrir(“pagina”) {
var width = 400;
var height = 250;
var left = 99;
var top = 99;
window.open(URL,'janela', 'width='+width+', height='+height+', top='+top+', left='+left+', scrollbars=yes, status=no, toolbar=no, location=no, directories=no, menubar=no, resizable=no, fullscreen=no');
} ");
ismael.costa
setOnclick não existe para o JSF, via java.
brufelipe, não entendi.
Poderia me passar um exemplo?
Valew