Seguinte… tenho uma página que carrega uma lista de clientes e ao lado de cada registro tem um a4j:commandButton que ao ser clicado chama outra página p/ realizar um pedido para aquele cliente… até ai blz…
O problema é que quando ele chama a página de realizar pedido não tô conseguindo recuperar o “id” do cliente!
meu command Button que chama cadastrarPedido.xhtml
<a4j:region><rich:dataTableid="tbclientes"value="#{actionClientes.listaClientes}"var="item"rows="4"style="width: 100%;"binding="#{actionClientes.table}"><f:facetname="header"><h:outputTextvalue="Lista de Clientes"/></f:facet><rich:column><f:facetname="header"><h:outputTextvalue="Código"/></f:facet><h:outputTextvalue="#{item.codCliente}"/></rich:column><rich:column><f:facetname="header"><h:outputTextvalue="Nome"/></f:facet><h:outputTextvalue="#{item.nome}"/></rich:column><rich:column><f:facetname="header"><h:outputTextvalue="Realizar Pedido"/></f:facet><a4j:commandButtonimage="imagens/realizarPedido.png"alt="Realizar Pedido para este cliente"action="#{actionClientes.homeCadastrarPedido}"><f:paramid="idPedido"name="idPedido"value="#{item.codCliente}"/><!--<f:setPropertyActionListener value="#{item}" target="#{actionClientes.clientes}"/>--></a4j:commandButton></rich:column></rich:dataTable>
Método homeCadastrarPedido que recupera o “id” e redireciona para cadastrarPedido.xhtml (já debuguei e esse método tá trazendo o id que preciso)
publicStringhomeCadastrarPedido(){Clientescliente=newClientes();try{cliente=(Clientes)((HttpServletRequest)FacesContext.getCurrentInstance().getExternalContext().getRequest()).getAttribute("item");}catch(Exceptione){e.printStackTrace();FacesContext.getCurrentInstance().addMessage("erro",newFacesMessage("Falha ao recuperar registro do cliente!"));}this.clientes=cliente;return"cadastrarpedido";}
e finalmente a página cadastrarPedido.xhtml que deveria receber o id mas tá recebendo 0 (criei um inputText para ver se o id tá chegando mas só vem 0)
<rich:panelid="cadastrarPedido"style="width: 900px;"><f:facetname="header"><h:outputTextvalue="Cadastro de Pedidos"></h:outputText></f:facet><h:panelGridcolumns="1"><rich:columnGroup><h:column><h:outputTextvalue="Cliente:"/></h:column><h:column><h:inputTextvalue="#{actionClientes.clientes.codCliente}"/></h:column></rich:columnGroup></h:panelGrid></rich:Panel>
esperoquealguémpossameajudar!!
mas “item” é o meu Objeto Cliente completo recuperado da página através do getAtributte… Eu descomentei essa linha e testei, na outra página chega 0 do mesmo jeito… Acho que o problema tá na forma como estou recebendo o id na página cadastrarPedidos.xhtml
mudei o scopo do meu actionClientes lá no faces-config de request para session e funcionou!! rs
dei uma aprimorada no meu método que tava feio pra caramba… ficou assim
publicStringhomeCadastrarPedido(){clientes=newClientes();try{setClientes((Clientes)((HttpServletRequest)FacesContext.getCurrentInstance().getExternalContext().getRequest()).getAttribute("item"));}catch(Exceptione){e.printStackTrace();FacesContext.getCurrentInstance().addMessage("erro",newFacesMessage("Falha ao recuperar registro do cliente!"));}return"cadastrarpedido";}
Aproveitando… depois que fiz o que mostrei acima, observei que quando eu clico na lista para realizar um pedido, depois quando vou acessar a opção cadastrar cliente os meus campos vem preenchidos com os dados daquele que eu tinha feito o pedido anteriormente!
Daí fiz o seguinte, no meu menu, quando eu clico no item cadastrar cliente chamo um método na minha maneged-Bean que dá new no meu Objeto cliente e ele limpa bonitinho pra mim…
Então eu pergunto… Tá certo isso que eu fiz? Tem uma forma mais bonita de implementar isso?