2016-12-03 51 views
0

我試圖讓一個登錄,第一次mvc我NullException在登錄

我上大學的proyect這個錯誤,我無法看到錯誤扔調試,我可以」弄清楚爲什麼。當調試器到達路線:

Empleado empleado = serviceEmpleado.correctLogin(loginFormDni, loginForm.getPassword());

控制器LoginController方法checkLogin它只是給我的異常。

type Informe de Excepción 

mensaje Request processing failed; nested exception is java.lang.NullPointerException 

descripción El servidor encontró un error interno que hizo que no pudiera rellenar este requerimiento. 

excepción 

org.springframework.web.util.NestedServletException: Request processing failed; nested exception is java.lang.NullPointerException 
    org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:973) 
    org.springframework.web.servlet.FrameworkServlet.doPost(FrameworkServlet.java:863) 
    javax.servlet.http.HttpServlet.service(HttpServlet.java:648) 
    org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:837) 
    javax.servlet.http.HttpServlet.service(HttpServlet.java:729) 
    org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52) 
causa raíz 

java.lang.NullPointerException 
    germanAcosta.electronicaDonPepe.controller.LoginController.checkLogin(LoginController.java:36) 
    sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
    sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source) 
    sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source) 
    java.lang.reflect.Method.invoke(Unknown Source) 
    org.springframework.web.method.support.InvocableHandlerMethod.invoke(InvocableHandlerMethod.java:215) 
    org.springframework.web.method.support.InvocableHandlerMethod.invokeForRequest(InvocableHandlerMethod.java:132) 
    org.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod.invokeAndHandle(ServletInvocableHandlerMethod.java:104) 
    org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.invokeHandleMethod(RequestMappingHandlerAdapter.java:749) 
    org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.handleInternal(RequestMappingHandlerAdapter.java:689) 
    org.springframework.web.servlet.mvc.method.AbstractHandlerMethodAdapter.handle(AbstractHandlerMethodAdapter.java:83) 
    org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:938) 
    org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:870) 
    org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:961) 
    org.springframework.web.servlet.FrameworkServlet.doPost(FrameworkServlet.java:863) 
    javax.servlet.http.HttpServlet.service(HttpServlet.java:648) 
    org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:837) 
    javax.servlet.http.HttpServlet.service(HttpServlet.java:729) 
    org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52) 
nota La traza completa de la causa de este error se encuentra en los archivos de diario de Apache Tomcat/8.0.36. 

類的LoginController

package germanAcosta.electronicaDonPepe.controller; 

import org.springframework.stereotype.Controller; 
import org.springframework.ui.Model; 
import org.springframework.web.bind.annotation.ModelAttribute; 
import org.springframework.web.bind.annotation.RequestMapping; 
import org.springframework.web.bind.annotation.RequestMethod; 
import org.springframework.web.bind.annotation.SessionAttributes; 
import org.springframework.web.servlet.mvc.support.RedirectAttributes; 

import germanAcosta.electronicaDonPepe.DTO.Login; 
import germanAcosta.electronicaDonPepe.dominio.Empleado; 
import germanAcosta.electronicaDonPepe.service.ServicioException; 

@Controller 
//@SessionAttributes("resultado") 
public class LoginController { 

    public ServiceEmpleado serviceEmpleado; 

    @RequestMapping("/login") 
    public String showLogin(Model model, 
      @ModelAttribute("resultado") String resultado, @ModelAttribute("error") String error) { 
     Login login = new Login(); 
     model.addAttribute("login", login); 
     model.addAttribute("resultado", resultado); 
     model.addAttribute("error", error); 

     return "login"; 
    } 


    @RequestMapping(value = "/login/check", method = RequestMethod.POST) 
    public String checkLogin(@ModelAttribute("login") Login loginForm, Model model, RedirectAttributes ra) { 

     try { 
      Integer loginFormDni = loginForm.getDni(); 

      Empleado empleado = serviceEmpleado.correctLogin(loginFormDni, loginForm.getPassword()); 

      model.addAttribute("loginForm", loginForm); 

      ra.addFlashAttribute("resultado", "El login es correcto bienvenido " + empleado.getNombre() + "."); 

      return "redirect:/login"; 

     } catch (ServicioException e) { 
      ra.addFlashAttribute("resultado", e.getMessage()); 
      return "redirect:/login"; 
     } catch (Exception e) { 
      ra.addFlashAttribute("error", e.getCause()+ "error"); 
      ra.addFlashAttribute("resultado", "El resultado no es el esperado"); 
      return "redirect:/login"; 
     } 
    } 
} 

類ServiceEmpleado

package germanAcosta.electronicaDonPepe.controller; 

import org.springframework.beans.factory.annotation.Autowired; 
import org.springframework.stereotype.Service; 

import germanAcosta.electronicaDonPepe.dominio.Empleado; 
import germanAcosta.electronicaDonPepe.repository.IEmpleadoDAO; 
import germanAcosta.electronicaDonPepe.service.ServicioException; 

@Service 
public class ServiceEmpleado { 

@Autowired 
private IEmpleadoDAO empleadoDAO; 

public Empleado correctLogin(Integer dni, String password) throws ServicioException { 

    Empleado empleado = this.empleadoDAO.getById(dni); 

    if (empleado == null) { 

     throw new ServicioException("El usuario no existe"); 

    } else if (empleado.getPassword() != password) { 

     throw new ServicioException("El password es incorrecto, por favor reintente nuevamente"); 

    } else { 

     return empleado; 

    } 

} 
} 

的Login.jsp

<%@ page language="java" contentType="text/html; charset=ISO-8859-1" 
    pageEncoding="ISO-8859-1"%> 
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%> 
<%@ taglib prefix="sf" uri="http://www.springframework.org/tags/form"%> 
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> 
<html> 
<head> 
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"> 
<title>Electronica Don Pepe</title> 
</head> 
<body> 
    <h1>login.jsp</h1> 

    <br> 
    <sf:form action="${pageContext.request.contextPath}/login/check" 
     method="post" commandName="login"> 
     <table> 
      <tr> 
       <td><sf:label path="dni">Ingrese su dni</sf:label></td> 
       <td><sf:input path="dni" type="text" /></td> 
      </tr> 
      <tr> 
       <td><sf:label path="password">Ingrese su contraseña</sf:label></td> 
       <td><sf:input path="password" type="text" /></td> 
      </tr> 
      <tr> 
       <td></td> 
       <td><input type="submit" value="Ingresar"></td> 
      </tr> 
     </table> 
    </sf:form> 
    <c:out value="${resultado}"></c:out> 
    <c:out value="${loginForm.password}"></c:out> 
</body> 
</html> 

在此先感謝

回答

0

我用@Autowired我ServiceEmpleado爲@Yuva建議,但我意識到,註釋它是一個接口而不是一個類。因此,我將ServiceEmpleado名稱更改爲ServiceEmpleadoImpl,並將該接口實施添加到名爲IServiceEmpleado的類中。

然後,添加@Transactional到ServiceEmpleadoImpl和我Config.java

這解決了問題配置的豆。謝謝

0

在LoginController中類,public ServiceEmpleado serviceEmpleado;不自動裝配。它沒有注入任何實例,因此它是空的。

使用

@Autowired 
public ServiceEmpleado serviceEmpleado; 
+0

這不是解決方案,但幫助我瞭解它是如何工作的。 –