我累了。过去两周我一直在研究Spring MVC项目,我发现这些文档充其量只是误导,所以我现在正在寻求帮助。 Sooooo .....请帮忙!
我想弄清楚的是,为什么,通过以下设置,验证错误不会被发送回视图,也就是说各种frm:error(s)
标记没有显示任何错误。我通过运行时调试检查了POST请求映射的BindingResult参数,并且存在错误。鉴于文档在这方面充其量是模糊的,有人可以指出我错误的分号或启发我的秘密酱是什么,我错过了将验证错误提供给用户,以告知他们他们的个人不足之处?
作为奖励,如果有人知道如何修改自动枚举验证,以便我可以从消息包中添加我自己的验证错误消息,我将非常感激。
请记住,我正在尝试保留这个纯粹的Spring MVC 3.0。我用2.5.6非常好,但我几乎没有使用注释,所以这个项目和其他任何东西一样都是学习练习。我想用纯粹的3.0注释等等,尽管我的大脑正在从我的梦中嘲笑我的文档中反叛,并且让我想抛弃命令对象,将HttpServletRequest设置为我唯一的RequestMapping参数,并且已经完成了用它。
春天3.0.6
瓷砖2.2.2
Glassfish 3.1.1
Spring app-servlet.xml
<context:component-scan base-package="com.facets.w101.almanac.spring"/>
<mvc:annotation-driven/>
... other stuff
Spring main.beandef.xml
<bean id="messageSource"
class="org.springframework.context.support.ResourceBundleMessageSource"
p:basename="messages" />
<bean id="userValidator" class="com.mycmpny.UserValidator" />
... other stuff
控制器代码
@Resource(name="userValidator")
private UserValidator userVldr;
@InitBinder
public void initBinder(WebDataBinder binder) {
binder.setValidator(this.userVldr);
}
@RequestMapping(value = "/newuser", method = RequestMethod.GET)
public String newUserSetup(ModelMap model) {
model.addAttribute("newUser", new User());
return "newuser";
}
@RequestMapping(value = "/newuser", method = RequestMethod.POST)
public ModelAndView newUserSave(@ModelAttribute @Valid User user, BindingResult result) {
ModelAndView mav = new ModelAndView("newuser");
mav.addObject("newUser", user);
if(result.hasErrors()) {
return mav;
}
/* Code that saves user */
return mav;
}
JSP代码
<frm:form method="POST" commandName="newUser">
<frm:errors path="*" cssClass="errorblock" element="div" />
<frm:label path="name">Name:</frm:label>
<frm:input path="name" id="userName" /><frm:errors path="name" /></td>
<frm:label path="type">User Type:</frm:label>
<frm:select path="type">
<frm:option value="-" label="Please Select..."/>
<frm:options />
</frm:select><frm:errors path="type" />
备注
<mvc:annotation-driven validator="userValidator"/>
,使userValidator符合documentation的全局,但由于某种原因,用户验证程序从未被发现,加载或使用过。我已尝试在[appname]-servlet.xml
和我的main.beandef.xml
文件中进行配置,但没有任何乐趣。所以我采用了@InitBinder方案。BindingResult result
作为方法参数,整个验证事件就会爆炸,而不是返回带注释的请求方法,抛出包含验证错误的异常,Spring会尝试将浏览器发送到404页面。您必须将BindingResult(或者可能是其他一些弹簧对象)作为参数(现在一共都是!)没有记录。frm:select
spring标记并添加无属性<frm:options />
子标记,Spring会自动使用具有其值的选项填充下拉选择。文本设置为枚举的getName
值。我还没有找到如何将自定义资源包消息绑定到它。无论如何,此功能完全没有记录。答案 0 :(得分:0)
public ModelAndView newUserSave(@ModelAttribute("newUser") @Valid User user, BindingResult result) {
.
.
}
上面应该有显示验证错误的技巧。