2013-04-30 116 views
0

我试图插入对象类型“用户”到数据库,但我得到这个错误的对象与控制器和验证数据库:插入使用Spring MVC 3

org.apache.jasper.JasperException: An exception occurred processing JSP page /WEB-INF/pages/gestionUser.jsp at line 165 

162:       
163:    <tr> 
164:     <td id="idtab">Nom :</td> 
165:      <td><form:input type="text" path="nom" class="round default-width-input"/></td> 
166:      <td><form:errors path="nom" cssClass="errorbox" /></td>       
167:    </tr> 
168:    <tr>    

唯一的例外是: java.lang.IllegalStateException:既不BindingResult也不对豆名“用户”可作为请求属性纯目标对象

这是我的形式:

<form:form action="${pageContext.request.contextPath}/ajouter_user" method="post" commandName="user"> 

        <table id="tabmenu"> 


       <tr> 
        <td id="idtab">Nom :</td> 
        <td><form:input type="text" path="nom" class="round default-width-input"/></td> 
        <td><form:errors path="nom" cssClass="errorbox" /></td>       
       </tr> 
       <tr>    
       <td id="idtab">Prénom :</td> 
       <td> <form:input type="text" path="prenom" class="round default-width-input"/></td> 
       <td><form:errors path="prenom" cssClass="errorbox" /></td> 
       </tr> 
       <tr> 
       <td id="idtab">Login :</td> 
       <td> <form:input type="text" path="login" cssClass="round default-width-input"/></td> 
       <td><form:errors path="login" class="errorbox" /></td> 
       <tr> 
       <td id="idtab">Password :</td> 
       <td> <form:input type="password" path="password" class="round default-width-input"/></td> 
       <td><form:errors path="password" cssClass="errorbox" /></td>  
       </tr> 
       <tr> 
      <td id="idtab">Séléctionner un rôle :</td> 
      <td> <form:select path="role"> 
           <form:option value="" label="Selectionner" /> 
           <form:option value="1">Administrateur</form:option> 
           <form:option value="2">Simple utilisateur</form:option> 
       </form:select></td> 
      <td><form:errors path="role" cssClass="errorbox" /></td>  
       </tr> 
       <tr> 
       <td id="idtab">Désactivé :</td> 
       <td><form:input type="checkbox" value="true" checked="checked" path="enable"/> Oui</td>  
      </tr> 
      <tr></tr> 
      <tr></tr> 
         <tr> <td colspan=2><input class="button round blue image-right ic-right-arrow" type="submit" value="Créer"></td></tr> 

        </table> 
       </form:form> 
        <div class="success"><c:out value="${msg_success}" /></div> 
         </div> <!-- end content-module-main --> 

        </div> <!-- end content-module --> 

这是它实现SimpleFormController

@RequestMapping(value = "/ajouter_user", method = RequestMethod.POST) 
    public String add(ModelMap model,Object command) { 
     User user = (User) command; 
     userservice.AddUser(user); 
     String msg= "Vous avez ajouter un utilisateur avec succès !"; 
     model.addAttribute("msg_success",msg); 
     return "gestionUser"; 

    } 

请帮助控制器的方法?错误在哪里?谢谢


,这是我的控制器:

package gestion.delegation.controller; 

import gestion.delegation.domaine.User; 
import gestion.delegation.service.ImplIUserService; 
import org.springframework.beans.factory.annotation.Autowired; 
import org.springframework.stereotype.Controller; 
import org.springframework.ui.ModelMap; 
import org.springframework.web.bind.annotation.ModelAttribute; 
import org.springframework.web.bind.annotation.RequestMapping; 
import org.springframework.web.bind.annotation.RequestMethod; 




@Controller 
public class GestionUserController{ 

    private ImplIUserService userservice; 

    @Autowired 
    public void setImplserv(ImplIUserService userservice) { 
     this.userservice = userservice; 
    } 


    @RequestMapping(value = "/ajouter_user", method = RequestMethod.POST) 
    @ModelAttribute("user") 
    public String add(ModelMap model) { 
     User user = new User(); 
     userservice.AddUser(user); 
     String msg= "Vous avez ajouter un utilisateur avec succès !"; 
     model.addAttribute("msg_success",msg); 
     return "gestionUser"; 

    } 
} 

这是该类用户

package gestion.delegation.domaine; 

    public class User { 
     int id; 
     String nom; 
     String prenom; 
     String login; 
     String password; 
     String role; 
     boolean enable; 
     public int getId() { 
      return id; 
     } 
     public void setId(int id) { 
      this.id = id; 
     } 
     public String getNom() { 
      return nom; 
     } 
     public void setNom(String nom) { 
      this.nom = nom; 
     } 
     public String getPrenom() { 
      return prenom; 
     } 
     public void setPrenom(String prenom) { 
      this.prenom = prenom; 
     } 
     public String getLogin() { 
      return login; 
     } 
     public void setLogin(String login) { 
      this.login = login; 
     } 
     public String getPassword() { 
      return password; 
     } 
     public void setPassword(String password) { 
      this.password = password; 
     } 
     public boolean getEnable() { 
      return this.enable; 
     } 
     public void setEnable(boolean enable) { 
      this.enable = enable; 
     } 

     public User(int id, String 

nom, String prenom, String login, 
      String password, String role, boolean enable) { 
     super(); 
     this.id = id; 
     this.nom = nom; 
     this.prenom = prenom; 
     this.login = login; 
     this.password = password; 
     this.role = role; 
     this.enable = enable; 
    } 
    public String getRole() { 
     return role; 
    } 
    public void setRole(String role) { 
     this.role = role; 
    } 
    public User() { 
     super(); 
    } 

} 

的验证:

package gestion.delegation.validator; 

import gestion.delegation.domaine.User; 

import org.springframework.validation.Errors; 
import org.springframework.validation.ValidationUtils; 
import org.springframework.validation.Validator; 

public class AddUserValidator implements Validator{ 

    @Override 
    public boolean supports(Class<?> clazz) { 

     return User.class.isAssignableFrom(clazz); 
    } 

    @Override 
    public void validate(Object obj, Errors err) { 
     ValidationUtils.rejectIfEmptyOrWhitespace(err, "nom", "name.required","Choisissez un nom"); 
     ValidationUtils.rejectIfEmptyOrWhitespace(err, "prenom", "prenom.required", "Choisissez un prenom"); 
     ValidationUtils.rejectIfEmptyOrWhitespace(err, "login", "login.required", "Choisissez un login"); 
     ValidationUtils.rejectIfEmptyOrWhitespace(err, "password", "password.required", "Choisissez un password"); 
     ValidationUtils.rejectIfEmpty(err, "role", "role.required", "Choisissez un role"); 

    } 

} 

这是验证的声明和控制器包在Dispatcher-servlet.xml中

<bean id="AddUserValidator" class="gestion.delegation.validator.AddUserValidator" /> 


    <context:component-scan base-package="gestion.delegation.controller" /> 
+0

该控制器没有呈现表单的请求映射 - 它只会处理表单发布。它是用于呈现需要使用@ModelAttribute注释方法的表单的控制器。将其添加到正确的控制器中,您将开始业务。 – 2013-04-30 21:24:25

+0

是的!现在我可以转到表单了,但是当我填充这些字段或者我将它留空时,会出现另一个错误: ** Etat HTTP 500 - 请求处理失败;嵌套异常是org.springframework.dao.DataIntegrityViolationException:PreparedStatementCallback; SQL [insert into utilisateurs(id,login,password,nom,prenom,enable)values(?,?,?,?,?,?)];列'login'不能为空;嵌套的异常是com.mysql.jdbc.exceptions.MySQLIntegrityConstraintViolationException:列'登录'不能为空** 我可以检查我的错误的MySQL,但问题是**为什么验证程序不工作?** – Somar 2013-04-30 21:35:20

+0

我建议你作为一个单独的问题发布 - 现在有太多无关紧要的东西。 – 2013-04-30 21:41:42

回答

0

OK,我会假设你已经在你的模型中的用户。因此,为了将其发布回控制器,您可以使用相同的注释,并将其作为方法中的参数之一。当您提交表单时,Spring会将其绑定到用户参数:

@RequestMapping(value = "/ajouter_user", method = RequestMethod.POST) 
    public String add(ModelMap model,@ModelAttribute User user) { 
     userservice.AddUser(user); 
     String msg= "Vous avez ajouter un utilisateur avec succès !"; 
     model.addAttribute("msg_success",msg); 
     return "gestionUser"; 

    } 
+0

即使我这样做没有结果,它仍然没有工作,但我不知道验证器是否是这里的问题?我应该创建两个方法吗?一个调用验证器,第二个调用ServiceManager插入数据库?我在XML文件中声明了验证器。谢谢主席回答 – Somar 2013-04-30 20:38:09

+0

你现在和在哪一行发生了什么错误? – 2013-04-30 20:40:10

+0

** Etat HTTP 500 - java.lang.IllegalStateException:Bean名称'user'的BindingResult和普通目标对象都不可用作为请求属性**但是不会显示该行 – Somar 2013-04-30 20:43:03

0

您需要将一个用户bean放入模型中。由于commandName =“user”属性,表单需要它。这样做的

一种方式是与modelAttribute注释

像这样的事情

@ModelAttribute 
public User user(){ 
    return new User(); 
} 
+0

我尝试它,但它不工作!我现在有同样的异常** Etat HTTP 500 - java.lang.IllegalStateException:BindingResult和bean名称'user'的普通目标对象都不作为请求属性**,但没有显示行中的错误165 – Somar 2013-04-30 20:16:48