No método consigo receber o parâmetro em questão. Entretanto quando a página é exibida (abaixo) o valor fica zerado, como se não tivesse sido recebido nada.
//Página a ser exibida<h:inputTextvalue="#{arComp.id}"/>
Percebi algo interessante, a classe marComp tem o scope @ViewScope fiz a alteração para @RequestScope e simplesmente o parâmetro funcionou! Com isso fiquei na dúvida como passo um parâmetro para uma classe anotada com @ViewScope /
nem compila! tb testei colocado [4] ao invés do (4)! tb não funciona!
D
dev.rafael
Como pode ñ compilar. Trata-se de um arquivo .xhtml. Ñ importa o absurdo q vc coloca nesse arquivo isso ñ impedir q o seu projeto seja compilado com sucesso, embora ele possa ñ rodar p/ causa disso.
Tem certeza q o erro ñ está em outro lugar?
Usando @RequestScoped funciona completo! chega o parâmetro no método e segue para página!
ja com o @ViewScoped, que é o que estou usando, o parâmetro chega no método, mais não na página!
D
dev.rafael
<?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"><htmlxmlns="http://www.w3.org/1999/xhtml"xmlns:h="http://java.sun.com/jsf/html"><h:head><title>Facelet Title</title></h:head><h:body><h:form><h:commandButtonvalue="Test"action="#{foo.dosth(4)}"/></h:form></h:body></html>
Sem nenhum erro p/ mim. Certamente o problema é em outro lugar. Eu estou testando no Glassfish v3. Verifique a seu server e se ñ há nenhuma configuração q possa estar gerando o conflito.
V
viniciuspadua
Vou tentar explicar melhor meu problema!
Imagine a situação abaixo!
//Página A
<?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"><htmlxmlns="http://www.w3.org/1999/xhtml"xmlns:h="http://java.sun.com/jsf/html"xmlns:f="http://java.sun.com/jsf/core"xmlns:ui="http://java.sun.com/jsf/facelets"xmlns:p="http://primefaces.prime.com.tr/ui"><h:head><title>Facelet Title</title></h:head><h:body><h:form>
Pg A
<h:outputFormatvalue="I = {0}. I2 = {1}"><f:paramvalue="#{foo.i }"/><f:paramvalue="#{foo2.i }"/></h:outputFormat><h:commandButtonvalue="Test"action="#{foo2.dosth }"><f:setPropertyActionListenervalue="7"target="#{foo.i}"/><f:setPropertyActionListenervalue="7"target="#{foo2.i}"/></h:commandButton></h:form></h:body></html>
//Página B
<?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"><htmlxmlns="http://www.w3.org/1999/xhtml"xmlns:h="http://java.sun.com/jsf/html"xmlns:f="http://java.sun.com/jsf/core"xmlns:ui="http://java.sun.com/jsf/facelets"xmlns:p="http://primefaces.prime.com.tr/ui"><h:head><title>Facelet Title</title></h:head><h:body><h:form>
Pg. B
<h:outputFormatvalue="I = {0}. I2 = {1}"><f:paramvalue="#{foo.i }"/><f:paramvalue="#{foo2.i }"/></h:outputFormat><h:commandButtonvalue="Test"action="#{foo.dosth }"><f:setPropertyActionListenervalue="6"target="#{foo2.i}"/><f:setPropertyActionListenervalue="6"target="#{foo.i}"/></h:commandButton></h:form></h:body></html>
//Foo@ManagedBeanpublicclassFooimplementsSerializable{privateinti=0;//Get e setpublicStringdosth(){System.out.println("i = "+i);return"/aaa.xhtml";}}
//Foo2@ManagedBeanpublicclassFoo2implementsSerializable{privateinti=0;//Get e setpublicStringdosth(){System.out.println("i = "+i);return"/bbb.xhtml";}}
Se colocar @RequestEscoped os parâmetros são passados através das classes e páginas! Entretanto se for com @ViewEscoped isso não ocorre! Como passo um parâmetro de uma página para outra através do viewScope?
D
dev.rafael
Vc pode fazer isso:
<!-- página A --><f:metadata><f:viewParamname="i"value="#{mBeanA.i}"/><f:viewParamname="i2"value="#{mBeanA.i2}"/></f:metadata><h:body><h:buttonvalue="Vai p/ página B"outcome="/paginaB"><f:paramname="i"value="#{mBeanA.i}"/><f:paramname="i2"value="#{mBeanA.i2"/></h:button></h:body>
So para finalizar! tenho como chamar um método assim que a página for aberta, pq eu pego os parâmetros e os valores são modificados, mais tenho que chamar o método de forma automática para popular o grid!
D
dev.rafael
Kra, os componentes <h:button> e <h:link> executam requisições do tipo GET, tanto q nem necessitam de um form. Infelismente a atual versão do JSF ñ suporta actions em requisições GET, embora vc possa simular isso usando os próprios getters da classe. Esse tipo de solução é deselegante e sugeito a erros. Vejamos se isso te ajuda.
Vc precisa ter cuidado quando estiver usando o @ViewScoped pois vc ainda ñ o compreendeu. O @ViewScoped vincula um ManagedBean à uma view (.xhtml) e esse ManagedBean é removido quando vc navega p/ outra página. Veja isso:
<!-- Essa é a página a.xhtml mas quando executo #{viewBean.action(1)} vou p/ a página b.xhtml --><h:form><h:commandButtonvalue="Submit"action="#{viewBean.action(1)}"/></h:form>
Nesse código a passagem de parametro realmente ñ vai funcionar pois o quando o método action() é chamado o ManagedBean viewBean está vinculado à view a.xhtml mas o método navega p/ a página b.xhtml. b.xhtml é uma outra view e portanto qualquer viewBean referenciado ai será diferente do referenciado na view a.xhtml.
O q eu quero dizer é q vc ñ deve usar ManagedBean @ViewScoped em operações q envolvam navegação. Esse escopo foi consebido p/ dar suporte à operações ajax q acontencem sem vc mudar de página. Quando vc precisar transportar informações de uma página p/ outra a maneira corréta de faze-lo é através de ManagedBean @RequestScoped.
V
viniciuspadua
eu to ± entendo a questão do ViewScope!
Mais algumas funcionalidade do primefaces so funciona com esse escopo!
E esta página tb porá vir ser necessário uma passa de parâmetro. Por isso a questão acima!
Com suas dicas resolvi o problema da passagem de parâmetros!
Fiz um javascript para ao finalizar o load da página clicar em um btn que server para atualizar o grid!
No final deu certo!
S
Sandro_Queiroz
Olá viniciuspadua…
Será se vc poderia postar a solução que vc encontrou?
Estou tendo a mesma dificuldade e talvez o seu javascript me ajude…Obrigado!!!