Fala moçada.
Seguinte.
Tenho um DataTable que mostra um monte de objetos. E em cada linha desta tabela eu tenho um link de DELETE e outro de EDIT. E no final da pagina eu tenho um outro link para Adicionar um objeto.
O DELETE ta funcionando de boua.
O adicionar tb. Quando eu clico neste link ele vai para a pagina de formulario. Aí eu preencho os campos e clico no botao salvar…aí ele salva de boua.
O meu problema esta na hora de editar um já existente…eu nao estou conseguindo recuperá-lo para mostrar na pagina de formulario para entao alterar e salvar.
Alguem tem alguma dica?
Eu tenho um classe(bean) soh para este objeto, ou seja, os atributos e seus getters e setters.
Tenho uma classe que faz tudo, ou seja, todos os actions dos links chamam um metodo para essa classe.
Bem,
o que você tem que fazer é carregar os valores nas propriedades do teu bean, sugestão faça como no delete, aí depois de recuperar o valor o item selecionado você seta os valores nas propriedades do teu bean e manda para a tua página de edição.
:okok:
Amigo…Vc eh “Patense”, “Patureba” ou “Patife” ?? Sempre vc me ajudando nos perrengues do JSF…
hehehehe :lol:
Brincadeiras a parte…
Olha…no link do Delete eu coloco um parametro com o id do objeto…
No link do Edit eu faço o mesmo…até aí blz…eu pego o ID e ate consigo ir no banco e pegar o cara…
O meu problema eh o seguinte.
No meu faces-config.xml meu bean ta com scope de request.
Quando eu tentei colocar o objeto na requisição, ele foi pra pagina de edição mas os campos da pagina ficaram em branco. Parece que ele nao conseguiu achar o objeto.
Quando eu coloco o objeto na sessao, ele preenche os campos na boua…
Como faço pra nao colocar na sessao e mesmo assim conseguir mostrar os dados na tela de edição?
Eu to com outra duvida…Eu nao sei como, na hora de alterar, pegar os dados da tela de uma maneira mais pratica…ao inves de ficar dando request.getParameter(“parametro”) em todos os parametros.
Vc sabe se tem uma maneira mais direta? No struts tem o form aí vc usa o beanUtils.copyProperties(form,objeto)…aí fica tudo maravilha…Nao tem algo parecido no JSF?
Ah…em maio estarei aí pra quebrar tudo na Fenamilho!! :brinde:
Valeu
Boa, boa, “Sou patureba estando aqui ou lá, onde que eu vá” puts… você é de onde seu preconceituoso? Aposto que é um calanguinho… vai vir só para pegar a belas garotas de Patos hein? eita… hehehehehehe
Cara, você não precisa de fazer isto, faces já faz para ti. O problema deve ser que você não está setando as informações corretamente. Coloca teus beans aí para eu dar uma olhada. Uma coisa não coloque em sessão tudo porque senão você irá matar o servidor.
:okok:
Que isso amigo…
Eu sou de Ribeirao Preto - SP. É que eu fiz faculdade em Uberlandia (UFU) e conheci a maior galera de Patos…
Mas vamos la.
Meu bean(dependente) nao tem segredo…ele tem uns atributos e seus getters e setters. Mais nada.
Minha outra classe que gera a listagem de dependentes eh essa:
public class ListaDependentes implements Serializable
{
private DataModel ldependentes = new ListDataModel();
public ListaDependentes(){ }
/*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*/
public DataModel getLdependentes()
{
Map sessao = null;
ArrayList list = new ArrayList();
try
{
Dependentes dps = new Dependentes();//Essa classe,Dependentes, faz o acesso ao banco
list = dps.listaDependentes();
this.ldependentes.setWrappedData(list);
}
catch(Exception ex)
{
System.out.println("Erro ao carregar a lista de dependentes. " + ex);
}
return this.ldependentes;
}
/*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*/
public void setLdependentes(DataModel dps)
{
this.ldependentes = dps;
}
}
E a classe onde eu relizo os Actions eh essa:
public class RealizaAcoes implements Serializable
{
private int var;
public RealizaAcoes()
{
}
public int getVar() {return this.var;}
public void setVar(int va) {this.var = va; }
/*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*/
public String initDependente()
{
return "initSuccess";
}
/*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*/
public String abreDependente()
/*
Metodo para abrir Dependente quando clica no Link de EDIT na pagina de listagem. Quando eu coloco o cara na sessao, eu consigo ver o objeto na pagina de edicao. Quando tento colocar na requisicao, vem um objeto em branco.
*/
{
String retorno = "abreSuccess";
HttpSession session = null;
HttpServletRequest request = null;
Dependente dp = new Dependente();
try
{
/*pegando a requisicao do contexto externo*/
request = (HttpServletRequest)FacesContext.getCurrentInstance().getExternalContext().getRequest();
//session = (HttpSession)FacesContext.getCurrentInstance().getExternalContext().getSession(false);
/*pegando o parametro cod da requisição*/
String parametro = (String) request.getParameter("codEdit");
/*fazendo parse do parametro(editCod) pertencente ao componente(link)*/
int cod = Integer.parseInt(parametro);
/*gerando um objeto de serviço e realizando o delete*/
Dependentes dps = new Dependentes();
dp = dps.abreDependenteCodigo(new Integer(cod));
System.out.println("Abriu Dependente. " + dp.getCod() + " - " + dp.getNome());
request.setAttribute("dependente",dp);
}
catch(Exception ex)
{
System.out.println("Erro ao Abrir Dependente. " + ex);
retorno = "abreFailure";
}
return retorno;
}
/*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*/
public String deleteDependente()
/*
Metodo para deletar Dependente. Chamado ao clicar DELETE na pagina de listagem
*/
{
String retorno = "deleteSuccess";
HttpServletRequest request = null;
try
{
/*pegando a requisicao do contexto externo*/
request = (HttpServletRequest) FacesContext.getCurrentInstance().getExternalContext().getRequest();
/*pegando o parametro cod da requisição*/
String parametro = (String) request.getParameter("cod");
/*fazendo parse do parametro(editCod) pertencente ao componente(link)*/
int cod = Integer.parseInt(parametro);
/*gerando um objeto de serviço e realizando o delete*/
Dependentes dps = new Dependentes();
dps.deleteDependenteCodigo(new Integer(cod));
dps = null;
}
catch(Exception ex)
{
System.out.println("Erro ao Excluir Dependente. " + ex);
retorno = "deleteFailure";
}
return retorno;
}
/*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*/
public String salvaDependente()
/*
Metodo para salvar (inserir/alterar) Dependente.
É AQUI QUE NAO ESTOU SABENDO O QUE FAZER!!!
Nao tem uma maneira mais pratica ao inves de ficar dando req.getParameter() ?
*/
{
String retorno = "salvaSuccess";
HttpServletRequest request = null;
Dependente dp = new Dependente();
try
{
request = (HttpServletRequest) FacesContext.getCurrentInstance().getExternalContext().getRequest();
Dependentes dps = new Dependentes();
//dp = dp.getDependente();
dp.setDependente((Dependente) request.getAttribute("dependente"));
if ( isUpdate(dp) )//entao altera
{
dps.alteraDependente(dp);
}
else //insere
{
dps.insereDependente(dp);
}
dps = null;
}
catch(Exception ex)
{
System.out.println("Erro ao Inserir/Salvar Dependente. " + ex);
retorno = "salvaFailure";
}
return retorno;
}
/*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*/
public boolean isUpdate(Dependente dp)
{
/*Se for um objeto novo o codigo virá zerado, senao vira com outro inteiro*/
boolean retorno = false;
if (dp.getCod() != 0)
{
retorno = true;
}
return retorno;
}
/*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*/
Será que agora vc consegue me ajudar?
Mas foi para isto que jsf foi implementado,… heheheheh
neste caso você criaria uma propriedade UIData, aí você associa ela através da propriedade valueBinding e acessa o dado selecionado através de propriedade.getRow();
:okok:
Oi amigo.
Olha…eu nao consegui achar exemplos que pudessem me orientar
Vc teria alguma coisa ae para me mandar? (teteorp@gmail.com)
abraços
Mas método aí que você informou que está com dúvidas parece não ser um método que vai carregar os dados e redirecionar para a página de edição do registro. Não é esta a tua dúvida? ou é quando você vai salvar?
:okok: