2012-01-13 2 views
1

Я довольно много нового в мире компьютерного программирования, поэтому было что-то вроде борьбы с глубоким пониманием многих концепций. Прямо сейчас, я работаю над проектом, в котором мы реализуем Spring MVC. Первым шагом в проекте является создание страницы входа для веб-сайта. Я попытался моделирования мину после той, что мы делали в классе, но я не могу пройти из-за ошибки в моем веб-браузере:Ошибка Spring MVC

Unsupported auto value type java.lang.String for field injuryReports.Login.userName 

Вот мой Логин объект класса:

package injuryReports; 

import java.io.Serializable; 
import javax.persistence.Entity; 
import javax.persistence.GeneratedValue; 
import javax.persistence.Id; 

@Entity 
public class Login implements Serializable { 
    private static final long serialVersionUID = 1L; 

    @Id @GeneratedValue 
    private String userName; 
    private String password; 
    private int userId; 

    public String getUserName() { 
     return userName; 
    } 

    public void setUserName(String userName) { 
     this.userName = userName; 
    } 

    public String getPassword() { 
     return password; 
    } 

    public void setPassword(String password) { 
     this.password = password; 
    } 

    public int getUserId() { 
     return userId; 
    } 

    public void setUserId(int userId) { 
     this.userId = userId; 
    } 

    public Login() { 
    } 

    public Login(String userName, String password) { 
     super(); 
     this.userName = userName; 
     this.password = password; 
    } 

    public Login(int userId, String userName2, String password2) { 
     this.userId = userId; 
     this.userName = userName2; 
     this.password = password2; 
    } 
} 

Мои LoginDao класс:

package injuryReports; 

import java.util.List; 

import javax.persistence.EntityManager; 
import javax.persistence.PersistenceContext; 
import javax.persistence.TypedQuery; 
import org.springframework.stereotype.Component; 
import org.springframework.transaction.annotation.Transactional; 

/** 
* 
* @author nGent 
* 
*/ 

@Component 
public class LoginDao { 
    @PersistenceContext private EntityManager em; 

    @Transactional 
    public void persist(Login user) { 
     em.persist(user); 
    } 

    public List<Login> getAllUsers() { 
     TypedQuery<Login> query = em.createQuery(
       "Select u FROM Login u ORDER BY u.id", Login.class); 
     return query.getResultList(); 
    } 

    public Login validateLogin(String userName, String password) { 
     Login login = null; 
     TypedQuery<Login> query = em.createQuery(
       "Select u From Login u where u.userName = :userName " + 
       " and u.password = :password", Login.class).setParameter(
       "userName", userName).setParameter("password", password); 
     try { 
      login = query.getSingleResult(); 
     } 
     catch (Exception e) { 
      //TODO: Handle Exception 
     } 
     return login; 
    } 
} 

И мой LoginController класс:

package injuryReports; 

import java.util.HashMap; 
import java.util.Map; 

import javax.servlet.http.HttpServletRequest; 
import org.springframework.beans.factory.annotation.Autowired; 
import org.springframework.stereotype.Controller; 
import org.springframework.web.bind.annotation.RequestMapping; 
import org.springframework.web.bind.annotation.RequestMethod; 
import org.springframework.web.servlet.ModelAndView; 

@Controller 
public class LoginController { 

    @Autowired 
    private LoginDao loginDao; 

    @RequestMapping(value = "/user", method = {RequestMethod.POST}) 
    public ModelAndView userEntry(HttpServletRequest request) { 
     String userName = request.getParameter("userName"); 
     String password = request.getParameter("password"); 

     if (userName != "" && password != "") { 
      loginDao.persist(new Login(userName, password)); 
     } 

     return new ModelAndView("logon.jsp", "loginDao", loginDao); 
    } 

    @RequestMapping(value = "/login") 
    public ModelAndView login(HttpServletRequest request) { 
     String userName = request.getParameter("userName"); 
     String password = request.getParameter("password"); 
     String page = "login.jsp"; 

     if (userName != "" && password != "") { 
      try { 
       Login login = loginDao.validateLogin(userName, password); 
       if (login != null) { 
        request.getSession().setAttribute("UserId", login.getUserId()); 
        page = "login.jsp"; 
       } 
      } 
      catch (Exception e) { 
       //TODO: Handle Exception 
      } 
     } 
     return new ModelAndView(page, getDaos()); 
    } 

    @RequestMapping(value = "/logon", method = {RequestMethod.GET}) 
    public ModelAndView logon(HttpServletRequest request) { 
     //int userId = (Integer) request.getSession().getAttribute("userId"); 
     //request.getSession().setAttribute("UserID", userId); 
     return new ModelAndView("logon.jsp", getDaos()); 
    } 

    public Map<String, Object> getDaos() { 
     Map<String, Object> models = new HashMap<String, Object>(); 
     models.put("loginDao", loginDao); 
     return models; 
    } 
} 

Простите, что это немного долго, я хотел предоставить как можно больше информации. Я бы очень признателен за любую помощь!

+0

Вы аннотирования неправильное поле ID; используйте ... ну, поле 'userId'. –

ответ

7

Вы не можете использовать @GeneratedValue на String. Он использует последовательности баз данных или функции AUTOINCREMENT в зависимости от базового механизма базы данных.

Либо удалите эту аннотацию:

@Id 
private String userName; 

или использовать целое число/долго ID:

@Id @GeneratedValue 
private int userId; 
Смежные вопросы