Popup em JSF sem Javascript
Tutorial de como fazer um popup sem escrever código javascript na página.
Vou explicar 2 meios de criar popup. Um atualizando o javascript dinamicamente e outro com myfaces.
Nesse tutorial, a lógica é criar um arquivo de script dinâmico, que vou chamar de dynamicScript.js. Vou incluir o método do popup nele dinamicamente e chamar o popup.
Primeiro, através de um jsp vou chamar um action no bean que é quem vai criar o método javascript pra incluir na página. Eu poderia ter incluído o método direto na hora de abrir a página, mas preferi assim.
1 <h:commandButton value="testaPopup" action="#{terminalBean.geraPopup}" />
Agora o método geraPopup. Observe que na minha estrutura, o arquivo dynamicScript.js está dentro da pasta pages/script. As duas barras invertidas se dão por conta do meu ambiente de desenvolvimento, windows.
01 public String geraPopup() {
02
03 String functionJs = "function popupJsf(url) { " +
04 "window.open(url, '_blank', 'toolbar=1, status=1, location=1,height = 300, width = 400');}";
05
06 String file = "pages\\script\\dynamicScript.js";
07 FacesContext ctx = FacesContext.getCurrentInstance();
08 HttpServletRequest request = (HttpServletRequest) ctx
09 .getExternalContext().getRequest();
10 String path = request.getRealPath("/");
11 file = path.concat(file);
12
13 try {
14 boolean exists = (new File(file)).exists();
15 if (exists) {
16 BufferedWriter out = new BufferedWriter(new FileWriter(file, true));
17 out.write(functionJs);
18 out.close();
19 } else {
20 File f = new File(file);
21 BufferedWriter out = new BufferedWriter(new FileWriter(f));
22 out.write(functionJs);
23 out.close();
24 }
25 } catch (IOException e) {
26 }
27
28 ctx.renderResponse();
29 return "/pages/teste/popup.jsf?redirect=true";
30 }
02
03 String functionJs = "function popupJsf(url) { " +
04 "window.open(url, '_blank', 'toolbar=1, status=1, location=1,height = 300, width = 400');}";
05
06 String file = "pages\\script\\dynamicScript.js";
07 FacesContext ctx = FacesContext.getCurrentInstance();
08 HttpServletRequest request = (HttpServletRequest) ctx
09 .getExternalContext().getRequest();
10 String path = request.getRealPath("/");
11 file = path.concat(file);
12
13 try {
14 boolean exists = (new File(file)).exists();
15 if (exists) {
16 BufferedWriter out = new BufferedWriter(new FileWriter(file, true));
17 out.write(functionJs);
18 out.close();
19 } else {
20 File f = new File(file);
21 BufferedWriter out = new BufferedWriter(new FileWriter(f));
22 out.write(functionJs);
23 out.close();
24 }
25 } catch (IOException e) {
26 }
27
28 ctx.renderResponse();
29 return "/pages/teste/popup.jsf?redirect=true";
30 }
Por último, o arquivo popup.jsf
Dentro da tag head o link para chamar o javascript dinâmico.
1 <script src="#{facesContext.externalContext.requestContextPath}/pages/script/dynamicScript.js" type="text/javascript"></script>
1 <h:commandButton value="testePopup" onclick="popupJsf('/servlet/qualquerCoisa.jsf');" />
E pronto. É só clicar.
Abaixo deixo um outro meio de fazer utilizando o myfaces.
Abaixo deixo um outro meio de fazer utilizando o myfaces.
Precisaremos do Myfaces Tomahawk configurado na aplicação. Esse é um recurso do Tomahawk.
No meu caso, ao clicar em um link, o mesmo deveria executar um action no bean e em seguida exibir o popup com o resultado.
No jsp:
|
No bean:
|
Classe PopupUtil:
|
Pronto. Ao clicar no link será criado um método javascript no cabeçalho da página que chama um popup definido no método montaPopup da classe PopupUtil. Verifique se seu navegador não bloqueia popups e é só testar.
Comentários
Mas, não saberia dizer como fazer isso, só q c/ a implementação RichFaces ou Woodstock (VisualWebUI)??!
Você pode ainda utilizar Richfaces e Tomahawk. Dá pra usar numa boa, sem conflitos!
Muito obrigado p/s dicas.
Gostaria muito q visitasse(m) o meu Blog: Engenharia de Software | Agil!
Sei q vc é 1 grande fã do JSF, mas o meu 1º post foi sobre (p/- é 1 framework brazuka) o VRaptor 3: VRaptor3: o framework Java mais CoC que eu já vi…!
1 ]o['ão,
Derlon
Mais uma pergunta :
e se eu quero que apos fechar a pop se executasse uma action para fazer um reload da pagina qe chamou a popup ? como seria ?
Obrigado