Qual a melhor maneira de passar parametros pra um popup em JSF?
eu pensei em pegar o request usando FacesContext.getCurrentContext().getExternalContext().getRequest()
e pegar os parametros, mas não sei se é a melhor forma
como vocês fazem?
Qual a melhor maneira de passar parametros pra um popup em JSF?
eu pensei em pegar o request usando FacesContext.getCurrentContext().getExternalContext().getRequest()
e pegar os parametros, mas não sei se é a melhor forma
como vocês fazem?
bom dia…
eu estou com um problema parecido…
na verdade eu tenho uma pagina em jsf e apartir dela eu abro um popup(outra janela)…nessa janela eu tenho uma pesquisa…depois que o usuario faz a pesquiva e escolhe alguma coisa…eu precisava que os dados escolhidos no popup preencha a primeira tela…alem de fechar o popup…
qual a melhor maneira de se fazer isso???
o grande be…acho que se responderem a sua pergunta…vao responder a minha tbm…
espero que alguem me ajude…
muito obrigado…
dps de 1 seculo…
up
to precisando dessa info tb.
abraço.
Olá pessoal.
Lá vamos nós:
O faces recomenda o uso do POST sempre, no entanto, em determinados casos não queremos usar POST, mas GET…Como o caso de abrir Popups.
Vou colocar algumas soluções para trabalhar com parâmetros.
// no JSP
<h:dataTable var="idObjeto" ..../>
...
</h:dataTable>
// No managed Bean
FacesContext.getCurrentInstance().getExternalContext().getRequestMap().get("idObjeto");
// no JSP
<h:commandButton action="#{mbean.exclui}">
<f:param id="codigo" value="#{idObjeto.codigo}"/>
</h:commandButton>
// No managed Bean
FacesContext.getCurrentInstance().getExternalContext().getRequestParameterMap().get("codigo");
a) criar um Servlet com mapeamento (supondo que chamamos via URL localhost:8080/projeto/servletTest?registro=121212);
b) Na servlet, retornar o valor passado via URL:
String registro = (String) request.getParameter("registro");
c) Através do objeto registro, definir o objeto em seu managedBean, carregando usando o valueResolver:
MeuManagedBean mbean = (MeuManagedBean) this.facesContext.getApplication().getVariableResolver().resolveVariable(this.facesContext, "meuManagedBean");
mbean.setRegistro(registro);[/code]
d) Definido o novo objeto no managed Bean, agora é necessário redirecionar a verdadeira página JSF:
[code]response.sendRedirect(request.getContextPath() + "/projeto/minhapagina.jsf");[/code]
O código completo da servlet seria algo como:
[code] protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
String registro = (String) request.getParameter("registro");
if (registro == null) {
throw new NullPointerException("Registro nao pode ser nulo. Eh necessario para a busca de autorizacao de fornecimento item");
MeuManagedBean mbean = (MeuManagedBean) this.facesContext.getApplication().getVariableResolver().resolveVariable(this.facesContext, "meuManagedBean");
mbean.setRegistro(registro);
// Carrega a pagina.
response.sendRedirect(request.getContextPath() + "/projeto/minhapagina.jsf");
}
É necessário, no entanto, recuperar o facesContext dentro da servlet. Poderia fazer uma Servlet que retornasse o facesContext e sua servlet estenderia ela.
Está pagina explica como fazer:
http://marcchung.com/2005/01/24/performing-a-jsf-get-2/
<managed-bean>
..................
<managed-bean-scope>request</managed-bean-scope>
<managed-property>
<property-name>id</property-name>
<value>#{param.id}</value>
</managed-property>
</managed-bean>
FIM:
Notem, estas são diversas técnicas. Para cada situação você deve usar aquela que satisfaça suas condições. Preferencialmente, eu prefiro servlet ou até mesmo servletFilter, pois você pode abstrair o código para pegar os parâmetros GET e fazer injetar no seu managedBean, via reflection. Desta forma, seu managed Bean seria populado sem você se preocupar. Esta solução é mais parecida com a numero 4, mas tem cuidados extras.
Att.
Poxa, estou tentando passar parâmetros através de um botão e não estou conseguindo. Consigo passar por um commandLInk normal, mas por um botão de ação não. Podem me ajudar?
Meu jsp:
<h:commandButton action="#{buscaTitulosPorGenero.buscar}" image="/LocadoraWeb/images/menu/g-acao.gif">
<f:param name="idGenero" value="1"/>
</h:commandButton>
<h:commandLink action="#{buscaTitulosPorGenero.buscar}" value="LINK">
<f:param name="idGenero" value="1"/>
</h:commandLink>
Meu backing bean imprime as saídas:
System.out.println("1 >> " + myRequest.getParameter("idGenero"));
System.out.println("2 >> " + myRequest.getAttribute("idGenero"));
System.out.println("3 >> " + myRequest.getSession().getAttribute("idGenero"));
System.out.println("4 >> " + facesContext.getExternalContext().getRequestParameterMap().get("idGenero"));
Vejam o que acontece quando eu aperto o command Link:
15:09:16,371 INFO [STDOUT] 1 >> 1
15:09:16,371 INFO [STDOUT] 2 >> null
15:09:16,371 INFO [STDOUT] 3 >> null
15:09:16,372 INFO [STDOUT] 4 >> 1
Agora vejam o que acontece quando eu aperto o botão:
15:10:23,145 INFO [STDOUT] 1 >>
15:10:23,145 INFO [STDOUT] 2 >> null
15:10:23,146 INFO [STDOUT] 3 >> null
15:10:23,146 INFO [STDOUT] 4 >>
Enfim. Quando o evento eh pelo botão, não estou conseguindo recuperar os parâmetros que passei. Alguém sabe porque?
Obrigado!
É sempre importante entender a comunicação em JSF,
Espero que ajude, abraços!
[quote]É sempre importante entender a comunicação em JSF,
Espero que ajude, abraços![/quote]
Esse link é muito bom. Esclarece muita coisa.
Obrigado Rafael Pontes.