rmj
Abril 10, 2012, 1:53pm
#1
Boa tarde pessoal,
tenho um metodo que preciso recuperar um parametro, de minha jsp, faço isso da seguinte maneira:
String valor = request.getParameter("produto"); // aqui ela vem com o dado que preciso
porem preciso settar esse cara para ser salvo no meu banco de dados, faço isso da seguinte maneira:
VotoPk votoPk = new VotoPk();
votoPk.getProduto().setCode(Long.parseLong(valor)); // NullPointerException
DAOFactory.getVotoPkDao().saveOrUpdate(votoPk);
ao debugar o codigo, qdo ele passa pela variavel valor , ele está trazendo o dado que preciso, mas qdo tento setar, me da NullPointerException.
alguma luz de como faço isso?
obrigado
agosti
Abril 10, 2012, 2:10pm
#2
Olá,
Você precisa instanciar o objeto Produto que está na classe VotoPk.
Ele que está nulo, por isso do NullPointerException
até
Você tem um new votoPk na linha de cima e logo
votoPk.getProduto()
neste caso, o objeto de Produto devolvido está nulo, não?
Por isso, ao chamar
votoPk.getProduto().setCode(Long.parseLong(valor));
a JVM lança a NPE.
Note que não é no valor, no Long, no votoPk, mas sim, no objeto da classe Produto que o método getProduto retorna.
Talvez tenha que instanciar este objeto antes de fazer essa associação.
rmj
Abril 10, 2012, 2:19pm
#4
Como resolve-lo ?
[code]public ActionForward votar(ActionMapping mapping, ActionForm form,
HttpServletRequest request, HttpServletResponse response) throws Exception {
VotoPk votoPk = new VotoPk();
HttpSession session = request.getSession();
String valor = request.getParameter("produto");
if(session.getAttribute("userSession") != null){
Usuario usuario = (Usuario) session.getAttribute("userSession");
votoPk.votar();
votoPk.setUsuario(usuario);
votoPk.getProduto().setCode(Long.parseLong(valor));
DAOFactory.getVotoPkDao().saveOrUpdate(votoPk);
}
return mapping.findForward("voto");
}[/code]
votoPk.setUsuario(usuario);
votoPk.setProduto(new Produto());//adicione esta linha
votoPk.getProduto().setCode(Long.parseLong(valor));
agosti
Abril 10, 2012, 2:24pm
#6
Olá,
Antes de executar essa linha de código:
votoPk.getProduto().setCode(Long.parseLong(valor));
Você precisa instaciar o Produto:
votoPk.setProduto(new Produto());
agora sim você vai conseguir setar o Code para esse produto.
até
rmj
Abril 10, 2012, 3:07pm
#7
drsmachado e agosti, muito obrigado pelas respostas.
Fiz a mesma coisa com Usuario da sessão
public ActionForward votar(ActionMapping mapping, ActionForm form,
HttpServletRequest request, HttpServletResponse response) throws Exception {
VotoPk votoPk = new VotoPk();
HttpSession session = request.getSession();
String valor = request.getParameter("produto");
if(session.getAttribute("userSession") != null){
Usuario usuario = (Usuario) session.getAttribute("userSession");
votoPk.votar();
votoPk.setProduto(new Produto());
votoPk.getProduto().setCode(Long.parseLong(valor));
votoPk.setUsuario(new Usuario());
votoPk.setUsuario(usuario);
session.setAttribute("userSession", usuario);
DAOFactory.getVotoPkDao().merge(votoPk);
DAOFactory.getUsuarioDao().saveOrUpdate(usuario);
}
return mapping.findForward("voto");
}
Ele me gera outro erro
Caused by: com.microsoft.sqlserver.jdbc.SQLServerException: Cannot insert the value NULL into column 'usuario', table 'VOTO'; column does not allow nulls. INSERT fails.
:x
O usuario da sessão ta null, ou vc vai no banco e retira a obrigatoriedade de inserir o valor, ou passa um usuario que nao seja null.
rmj
Abril 11, 2012, 8:34am
#9
Justamente isso que não sei como fazer. Pegar o user logado
achei que dessa forma funcionaria
[quote] votoPk.setUsuario(new Usuario());
votoPk.setUsuario(usuario);
session.setAttribute(“userSession”, usuario); [/quote]