NullPointerException

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

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.

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));

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é

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.

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]