Fórum NullPointerException ao tentar adicionar valores no banco #514455
23/03/2015
0
Estou estudando pela apostila FJ-21 da Caelum e, ao tentar implementar uma funcionalidade a mais no projeto, obtive o seguinte erro:
Aqui estão os códigos:
TipoDAO
Tipo
AdicionaTiposAction
Struts.xml
formulario-tipos
Alguém aí pode me ajudar a resolver?
Obrigado.
type Exception report message description The server encountered an internal error that prevented it from fulfilling this request. exception java.lang.NullPointerException br.com.caelum.tarefas.dao.TipoDAO.adiciona(TipoDAO.java:28) br.com.caelum.tarefas.action.AdicionaTiposAction.execute(AdicionaTiposAction.java:20) sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) java.lang.reflect.Method.invoke(Method.java:483) com.opensymphony.xwork2.DefaultActionInvocation.invokeAction(DefaultActionInvocation.java:441) com.opensymphony.xwork2.DefaultActionInvocation.invokeActionOnly(DefaultActionInvocation.java:280) com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:243) com.opensymphony.xwork2.interceptor.DefaultWorkflowInterceptor.doIntercept(DefaultWorkflowInterceptor.java:165) com.opensymphony.xwork2.interceptor.MethodFilterInterceptor.intercept(MethodFilterInterceptor.java:87) com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:237) com.opensymphony.xwork2.validator.ValidationInterceptor.doIntercept(ValidationInterceptor.java:252) org.apache.struts2.interceptor.validation.AnnotationValidationInterceptor.doIntercept(AnnotationValidationInterceptor.java:68) com.opensymphony.xwork2.interceptor.MethodFilterInterceptor.intercept(MethodFilterInterceptor.java:87) com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:237) com.opensymphony.xwork2.interceptor.ConversionErrorInterceptor.intercept(ConversionErrorInterceptor.java:122) com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:237) com.opensymphony.xwork2.interceptor.ParametersInterceptor.doIntercept(ParametersInterceptor.java:195) com.opensymphony.xwork2.interceptor.MethodFilterInterceptor.intercept(MethodFilterInterceptor.java:87) com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:237) com.opensymphony.xwork2.interceptor.ParametersInterceptor.doIntercept(ParametersInterceptor.java:195) com.opensymphony.xwork2.interceptor.MethodFilterInterceptor.intercept(MethodFilterInterceptor.java:87) com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:237) com.opensymphony.xwork2.interceptor.StaticParametersInterceptor.intercept(StaticParametersInterceptor.java:179) com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:237) org.apache.struts2.interceptor.MultiselectInterceptor.intercept(MultiselectInterceptor.java:75) com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:237) org.apache.struts2.interceptor.CheckboxInterceptor.intercept(CheckboxInterceptor.java:94) com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:237) org.apache.struts2.interceptor.FileUploadInterceptor.intercept(FileUploadInterceptor.java:235) com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:237) com.opensymphony.xwork2.interceptor.ModelDrivenInterceptor.intercept(ModelDrivenInterceptor.java:89) com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:237) com.opensymphony.xwork2.interceptor.ScopedModelDrivenInterceptor.intercept(ScopedModelDrivenInterceptor.java:130) com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:237) org.apache.struts2.interceptor.debugging.DebuggingInterceptor.intercept(DebuggingInterceptor.java:267) com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:237) com.opensymphony.xwork2.interceptor.ChainingInterceptor.intercept(ChainingInterceptor.java:126) com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:237) com.opensymphony.xwork2.interceptor.PrepareInterceptor.doIntercept(PrepareInterceptor.java:138) com.opensymphony.xwork2.interceptor.MethodFilterInterceptor.intercept(MethodFilterInterceptor.java:87) com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:237) com.opensymphony.xwork2.interceptor.I18nInterceptor.intercept(I18nInterceptor.java:165) com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:237) org.apache.struts2.interceptor.ServletConfigInterceptor.intercept(ServletConfigInterceptor.java:164) com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:237) com.opensymphony.xwork2.interceptor.AliasInterceptor.intercept(AliasInterceptor.java:179) com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:237) com.opensymphony.xwork2.interceptor.ExceptionMappingInterceptor.intercept(ExceptionMappingInterceptor.java:176) com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:237) org.apache.struts2.impl.StrutsActionProxy.execute(StrutsActionProxy.java:52) org.apache.struts2.dispatcher.Dispatcher.serviceAction(Dispatcher.java:488) org.apache.struts2.dispatcher.ng.ExecuteOperations.executeAction(ExecuteOperations.java:77) org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter.doFilter(StrutsPrepareAndExecuteFilter.java:91) note The full stack trace of the root cause is available in the Apache Tomcat/6.0.43 logs.
Aqui estão os códigos:
TipoDAO
public class TipoDAO {
private final Connection connection;
//Construtor
public TipoDAO() {
try {
this.connection = new ConnectionFactory().getConnection();
} catch (SQLException e) {
throw new RuntimeException(e);
}
}
public void adiciona(Tipo tipo){
String sql= "insert into tipo (descricao) values (?)";
PreparedStatement stmt;
try{
stmt= connection.prepareStatement(sql);
stmt.setString(1, tipo.getDescricao());
stmt.execute();
}catch(SQLException e){
throw new RuntimeException(e);
}
}
}
Tipo
public class Tipo {
private Long id;
private String descricao;
public Long getId() {
return id;
}
public void setId(Long id) {
this.id = id;
}
public String getDescricao() {
return descricao;
}
public void setDescricao(String descricao) {
this.descricao = descricao;
}
}AdicionaTiposAction
@ParentPackage("default")
public class AdicionaTiposAction{
private Tipo tipo;
@Action(value="adicionaTipo", results = {
@Result(name="ok", location="tipo-adicionado.jsp"),
@Result(name = "input", location = "formulario-tipos.jsp")
})
public String execute(){
new TipoDAO().adiciona(tipo);
return "ok";
}
public Tipo getTipo() {
return tipo;
}
public void setTipo(Tipo tipo) {
this.tipo = tipo;
}
}
Struts.xml
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE struts PUBLIC '-//Apache Software Foundation//DTD Struts Configuration 2.0//EN' 'http://struts.apache.org/dtds/struts-2.0.dtd'> <struts> <package name="default" extends="struts-default"> <interceptors> <interceptor name="autorizador" class="br.com.caelum.tarefas.interceptador.AutorizadorInterceptor" /> <interceptor-stack name="seguranca"> <interceptor-ref name="autorizador" /> <interceptor-ref name="defaultStack" /> </interceptor-stack> </interceptors> <global-results> <result name="naoLogado">/WEB-INF/content/formulario-login.jsp</result> </global-results> <action name="tarefaForm" > <result>/WEB-INF/content/formulario-tarefas.jsp</result> </action> <action name="tipoForm" > <result>/WEB-INF/content/formulario-tipos.jsp</result> </action> <action name="sairLista"> <result>SessionMap sessao = (SessionMap)ActionContext.getContext().get(ActionContext.SESSION); sessao.invalidate();</result> </action> <action name="loginForm" > <result>/WEB-INF/content/formulario-login.jsp</result> </action> </package> </struts>
formulario-tipos
<%@ page language="java" contentType="text/html; charset=ISO-8859-1"
pageEncoding="ISO-8859-1"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<%@ taglib prefix="s" uri="/struts-tags" %>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
<title>Adicionar tipo</title>
</head>
<body>
<body>
<h3>Adicinar tipos</h3>
<s:fielderror fieldName="tipo.descricao"/>
<form action="adicionaTipo" method="post">
Descricao:<br/>
<textarea name="tipo.descricao" rows="5" cols="100"></textarea><br/>
<input type="submit" value="Adicionar">
</form>
</body>
</html>Alguém aí pode me ajudar a resolver?
Obrigado.
Guilherme
Curtir tópico
+ 0
Responder
Post mais votado
23/03/2015
Depura o método adiciona() e verifica se o "Tipo" não está nulo.
Ronaldo Lanhellas
Responder
Gostei + 1
Mais Posts
23/03/2015
Ronaldo Lanhellas
Depura o método adiciona() e verifica se o "Tipo" não está nulo.
Responder
Gostei + 0
Clique aqui para fazer login e interagir na Comunidade :)