Boa tarde pessoal, estou começando com java web a pouco tempo, e estou com algumas dúvidas…
Eu montei uma lista de clientes, com o botão de editar cliente, até aí tudo OK…
Daí a unica forma que eu consegui passar o ID do cliente para a pagina de editar, foi com session, fiz assim:
No botão da lista de clientes: <p:commandButton value="Alterar" style="margin-right:20px;" action="#{alterarClienteBean.recuperarPagina}"><f:param name="pes_id" value="#{gerenciarClientesBean.selectedCliente.pes_id}"/> </p:commandButton>
O alterarClienteBean está com escopo SESSION, o recuperarPagina ficou:
[code]public String recuperarPagina() {
pes_id = Long.parseLong(FacesContext.getCurrentInstance().getExternalContext().getRequestParameterMap().get(“pes_id”));
if (pes_id == 0) {
System.out.println(“Erro, pes_id vazio!”);
} else {
ClienteDao clienteDao = new ClienteDao();
Cliente cliente = clienteDao.getClienteById(pes_id);
codigo = String.valueOf(cliente.getCli_codigo());
razao = cliente.getCli_razao();
…[/code]
Gostaria de saber se essa é a melhor forma de se fazer…?
Se for, outra coisa que aconteceu dessa forma, foi que, depois que eu edito esse cliente, e dou um F5 na pagina alterarCliente.jsf, ele só fica dando a msg que o cliente foi alterado com sucesso… Como eu resolveria isso no meu código?
Obrigado desde já!
Caso precise de mais algum código para analisar o pq que esta ficando só no “Alterado com sucesso”, só falar que eu posto aqui!
Abraços!
Olá faelzindc, como exatamente você está editando as pessoas? Estas estão listadas em um datatable? Como está isso?
Exatamente! Estão em um database. no listarClientesBean, eu crio uma lista de objetos <Cliente> e no jsf eu crio um dataTable, e busco no bean o valor do cliente que está sendo listado…
Até que chego nesse botão editar:
<p:commandButton value="Alterar" style="margin-right:20px;" action="#{alterarClienteBean.recuperarPagina}"><f:param name="pes_id" value="#{gerenciarClientesBean.selectedCliente.pes_id}"/> </p:commandButton>
o método alterarClienteBean.recuperarPagina faz com que busque o pes_id no session que coloquei no parametro do commandButton, ai com esse pes_id ele busca no banco os dados do cliente, e coloca em seus devidos campos:
[code]public String recuperarPagina() {
pes_id = Long.parseLong(FacesContext.getCurrentInstance().getExternalContext().getRequestParameterMap().get(“pes_id”));
if (pes_id == 0) {
System.out.println(“Erro, pes_id vazio!”);
} else {
ClienteDao clienteDao = new ClienteDao();
Cliente cliente = clienteDao.getClienteById(pes_id);
HttpSession hs = (HttpSession) FacesContext.getCurrentInstance().getExternalContext().getSession(true);
VendedorLogin vendedorLogin = (VendedorLogin) hs.getAttribute(“currentUser”);
VendedorDao vendedorDao = new VendedorDao();
vendedor = vendedorDao.getVendedorByCod(vendedorLogin.getCodigo());
if (cliente.getVen_id().getPes_id() != vendedor.getPes_id()) {
System.out.println("Cliente não é desse vendedor! ID_C: " + cliente.getVen_id().getPes_id() + " ID_V: " + vendedor.getPes_id());
} else {
codigo = String.valueOf(cliente.getCli_codigo());
razao = cliente.getCli_razao();
cnpj = cliente.getCli_cnpj();
ie = cliente.getCli_ie();
loja = String.valueOf(cliente.getCli_loja());
nome = cliente.getPes_nome();
email = cliente.getPes_email();
endereco = cliente.getPes_endereco();
bairro = cliente.getPes_bairro();
cep = cliente.getPes_cep();
comboBean.setEstado(cliente.getCid_id().getEst_id());
comboBean.setCidade(cliente.getCid_id());
telefone = "";
tipoTelefone = "1";
telefones = new ArrayList();
TelefoneDao telefoneDao = new TelefoneDao();
List<Telefone> telefones_temp;
telefones_temp = telefoneDao.getTelefoneByPesId(cliente);
for (Telefone t : telefones_temp) {
TelefoneFormulario tel_form = new TelefoneFormulario();
tel_form.setTel_numero(t.getTel_numero());
tel_form.setTel_tipo(String.valueOf(t.getTel_tipo()));
telefones.add(tel_form);
}
}
}
return "alterarCliente.jsf?faces-redirect=true";
}[/code]
você poderia passar o parâmetro pelo commandButton.
este exemplo do mkyong mostra diversas formas de recuperar o objeto.
[quote=andre.froes]você poderia passar o parâmetro pelo commandButton.
este exemplo do mkyong mostra diversas formas de recuperar o objeto.[/quote]
Foi exatamente daí que eu fiz o meu codigo, aproveita e tira uma dúvida minha, a UNICA forma eh com SessionScope que nem está nos exemplos?
Resumindo o meu problema de antes, é que após ter a conclusão que o cliente foi alterado, o que eu precisava era apagar a session do bean alterarCliente, que é o que não estou sabendo fazer… Como eu iria “apagar” essa session, e em qual momento?
Obrigado!
Você pode utilizar o ViewScoped e realizar as operações via ajax, uma vez finalizado as operações, você simplesmente recarrega a página e todas as variáveis serão “resetadas”, tendo em vista como trabalha este escopo.
Eu te recomendo ler um pouco sobre os escopos do JSF, isso ajuda muito, e é algo que poucos fazem, por isso tendem a ficar bastante perdidos na hora de desenvolver.
Leia sobre o ciclo do JSF que facilita bastante, e já é meio caminho andado só nisso :lol:
[quote=andre.froes]Você pode utilizar o ViewScoped e realizar as operações via ajax, uma vez finalizado as operações, você simplesmente recarrega a página e todas as variáveis serão “resetadas”, tendo em vista como trabalha este escopo.
Eu te recomendo ler um pouco sobre os escopos do JSF, isso ajuda muito, e é algo que poucos fazem, por isso tendem a ficar bastante perdidos na hora de desenvolver.
Leia sobre o ciclo do JSF que facilita bastante, e já é meio caminho andado só nisso :lol: [/quote]
Vou tentar ler agora nas férias da minha facul…
To fazendo meio corrido assim porque sou programador PHP, e o gerente aqui pediu pra mim fazer um sisteminha em Java Web… To fazendo meio corrido como posso… hAuhahuaUA
Ainda mais que eu sabendo PHP, chega na hora de fazer a msm coisa em java web, ai sim que eu me perco… hahuauha… mas to conseguindo levar, ta saindo! só preciso entender melhor mesmo esses jeitos de passar parametros e escopo…
Obrigado amigo, vou procurar alguns exemplos aqui…
[quote=andre.froes]Você pode utilizar o ViewScoped e realizar as operações via ajax, uma vez finalizado as operações, você simplesmente recarrega a página e todas as variáveis serão “resetadas”, tendo em vista como trabalha este escopo.
Eu te recomendo ler um pouco sobre os escopos do JSF, isso ajuda muito, e é algo que poucos fazem, por isso tendem a ficar bastante perdidos na hora de desenvolver.
Leia sobre o ciclo do JSF que facilita bastante, e já é meio caminho andado só nisso :lol: [/quote]
Tem como tirar mais uma dúvida? Não precisa explicar muito, só pra mim ficar sem essa dúvida e seguir… Prometo que depois lerei mais a fundo sobre todos!
Queria saber a diferença de:
@PostConstruct public init(){}
public construtor(){}
e quando eu coloco um action em um bottao, por exemplo action={#bean.Teste},
gostaria de saber quando cada um deles é executado…
Obrigado!
Quando você invoca o construtor, o bean não é inicializado, nenhuma dependência é injetada nele. Com o @PostConstruct o bean é inicializado completamente e você pode utilizar todas as dependências dele.