spring MVC中使用spring的form标签库,edit.jsp
代码如下:
<sf:form method="POST" modelAttribute="spitter" enctype="multipart/form-data">
<fieldset>
<table cellspacing="0">
<tr>
<th><sf:label path="fullName">Full name:</sf:label> </th>
<td><sf:input path="fullName" size="15" id="user_full_name" /><br />
<sf:errors path="fullName" cssClass="error" />
</td>
</tr>
<tr>
<th><sf:label path="name">Username:</sf:label> </th>
<td><sf:input path="name" size="15" maxlength="15" id="user_screen_name" />
<small id="username_msg">No spaces, Please.</small><br />
<sf:errors path="name" cssClass="error" />
</td>
</tr>
<tr>
<th><sf:label path="password">Password:</sf:label> </th>
<td><sf:password path="password" size="30" showPassword="true" id="user_password" />
<small>6 characters or more.</small><br />
<sf:errors path="password" cssClass="error" />
</td>
</tr>
<tr>
<th><sf:label path="email">Email Address:</sf:label> </th>
<td><sf:input path="email" size="30" id="user_email" />
<small>In case you forget something.</small><br />
<sf:errors path="email" cssClass="error" />
</td>
</tr>
<tr>
<th></th>
<td>
<sf:checkbox path="updateByEmail" id="user_send_email_newsletter" />
<label for="user_send_email_newsletter">Send me email updates!</label>
</td>
</tr>
<tr>
<th></th>
<td><input name="commit" type="submit" value="Create Account." /></td>
</tr>
</table>
</fieldset>
</sf:form>
控制器的代码如下:
@RequestMapping(method = RequestMethod.GET, params = "new")
public String createSpitterProfile(Model model) {
model.addAttribute(new Spitter());
return "spitters/edit";
}
@RequestMapping(method = RequestMethod.POST)
public String addSpitterFromForm(@Valid @ModelAttribute("spitter")Spitter spitter, BindingResult bindingResult) {
if(bindingResult.hasErrors()) {
return "spitters/edit";
}
spitterService.saveSpitter(spitter);
return "redirect:/spitter/" + spitter.getName();
}
在jsp的<sf:form method="POST" modelAttribute="spitter" enctype="multipart/form-data">
语句中,如果enctype=application/x-www-form-urlencoded
则运行正常;如果调成multipart/form-data
后,提交表单时不管用户名写的是什么,转到的网页后面显示的用户名都是null
。请问这是怎么回事?
multipart/form-data
这是上传文件使用的编码方式,你的表单当然要设置成enctype=application/x-www-form-urlencoded