2012-12-05 34 views
1

目前我正在进入春季,一切工作到目前为止,除了形式。控制器中的映射函数在表单获取子集时被调用,但值全为空。我希望你有任何想法如何解决这个错误。我使用Spring 3.1.2从窗体输入值总是空

控制器类:

@Controller 
public class MyController{ 


@RequestMapping(value="/registerSave.html", method=RequestMethod.POST) 
public ModelAndView registerSave(@ModelAttribute("UserInput") UserInput a) { 
    Logger log = LoggerFactory.getLogger(MeinController.class); 
    log.info("username: " + a.getUsername()); //a.getUserName() is null >.< 
    ModelAndView mav= new ModelAndView(); 
    User registerUser= new User(a.getUsername(), securityService.encodePassword(a.getPassword()), a.getFullname(), a.getEmail()); 
    try{ 
     messageService.createUser(registerUser); 
     mav.setViewName("registerSuccess"); 
    } catch(Exception exception) { 
     log.info("cannot create user "+ a.getUsername()+ " : "+ exception.getMessage()); 
     mav.setViewName("registerFail"); 
    } 
    return mav; 
} 

} 

在jsp:

<!DOCTYPE HTML> 
<html> 
<body > 
<article> 
    <section> 
     <form method="post" action="registerSave.html" modelAttribute="UserInput"> 
      <section>E-Mail Adresse:<br> 
       <input id="email" autofocus="autofocus" size="35" type="text" required="required" name="email" maxlength="30"/> 
      </section> 
      <section>Username:<br> 
       <input size="35" type="text" required="required" name="email" maxlength="30"/> 
      </section> 
      <section>Password:<br> 
       <input size="35" required="required" type="password" name="passwort"/> 
      </section> 
      <section class="right">Password:<br> 
       <input id="inPw2" title="Password$Bitte geben sie hier das selbe Passwort ein, wie im ersten Feld$Dies dient der überprüfung, für den Fall, dass sie sich vertippt haben" size="35" required="required" type="password" name="passwort"/> 
      </section> 
      <section >Your full name:<br> 
       <input id="fullname" size="35" type="text" required="required" name="email" maxlength="30"/> 
      </section>   
      <p> 
       <input size="35" type="submit" value="Regestieren"/> 
      </p> 
     </form> 
    </section> 
</article> 
</body> 
</html> 

类UserInput:

public class UserInput { 

private String username; 
private String password; 
private String fullname; 
private String email; 
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 String getFullname() { 
    return fullname; 
} 
public void setFullname(String fullname) { 
    this.fullname = fullname; 
} 
public String getEmail() { 
    return email; 
} 
public void setEmail(String email) { 
    this.email = email; 
} 
} 

回答

3

好像您的用户名输入元素都有名字是电子邮件。用户名格式中没有输入框。除此之外的一切都是正确的,应该有效。

+0

更多Spring MVC控制器和表单示例可以在这里找到:http://www.commonj.com/blogs/2012/08/22/spring-mvc- 3-教程简单形式搬运/ – Rod

1

请加上ModelAttribute到表格

<form method="post" action="registerSave.html" modelAttribute="UserInput"> 

我认为这是因为我们没有在GET请求中设置命令值。发布请求时会创建一个新的命令对象。 尝试添加该方法给控制器类,看看是否能解决..

@RequestMapping(value="/registerSave.html", method=RequestMethod.GET) 
public ModelAndView registerGet() { 
    ModelAndView mav = new ModelAndView(); 
    UserInput userInput = new UserInput; 
    mav.addObject("UserInput", userInput); 
    mav.setViewName("registerSave.html"); 
    return mav; 
    } 
+0

谢谢你的回答,但不幸的是它仍然是NULL – CAA

+1

你使用的是哪个版本的spring?你可以改变modelAttribute为commandName'

' – Usha

+0

commandName也不能解决问题。它的版本是3.1.2 – CAA