错误消息的顺序不正确
在我的春季MVCvalidation中,我的错误消息的顺序随机变化,我希望消息的顺序与它们在页面上显示的顺序相同。
我的AccountForm.java类看起来像:
@NotNull(message = "Account name cannot be empty.") @Size(min=3, max=50, message="Account name must be between 3 and 50 characters long.") private String accountName; @NotNull(message = "Company name cannot be empty.") @Size(min=3, max=50, message="Company name must be between 3 and 50 characters long.") private String companyName;
我还在控制器中添加了一些自定义错误:
public ModelAndView create(@Valid AccountForm accountForm, BindingResult bindingResult) { ModelAndView mav = new ModelAndView("accounts/new"); mav.addObject("errors", bindingResult.getAllErrors()); mav.addObject("accountForm", accountForm); if (!bindingResult.hasErrors()) { if(accountService.findByAccountName(accountForm.getAccountName()) != null) { bindingResult.addError(new ObjectError("accountName", "Account name is already is use")); } .. .. } if(bindingResult.hasErrors() { return mav; } ..
当我在表单上点击提交时,消息的顺序不断变化。
我使用以下方法在视图中渲染错误:
${error.defaultMessage}
这可以修复吗?
这是通过validation组实现的,Spring支持它。 您正在使用@Valid注释,但它应该是@Validated才能使用validation组:
public ModelAndView submitSearch(@Validated(value={OrderChecks.class}) @ModelAttribute("SearchStringBackingObject") final SearchStringBackingObject backingObject
OrderChecks.class:
@GroupSequence(value={NotEmptyGroup.class, LengthCheckGroup.class, DiacriticeCheckGroup.class, EmailValidationGroup.class, EmailLengthValidationGroup.class, Email3EntriesValidationGroup.class, EntityAlreadyExistsValidatorGroup.class, Default.class}) public interface OrderChecks {}
并在支持对象内:
@NotBlank(groups=NotEmptyGroup.class) @Length(max=25, groups=LengthCheckGroup.class) @DiacriticeCheck(groups=DiacriticeCheckGroup.class) private String firstname="";
其中@GroupSequence中的每个条目都是一个接口。
编辑
因此,如果您希望首先validation帐户名称,则为其创建一个接口:
public interface AccountNameGroup{}
然后在validation组界面中,您将成为第一个界面:
@GroupSequence(value={AccountNameGroup.class, the rest of groups}) public interface OrderOfGroups{} And of course inside the Controller you specify the @Validated annotation with the OrderOFGroups interface.
这样,帐户名称将首先得到validation
我也面临同样的问题,并尝试了很多。 我认为现在有标准的方法在JSR-303中这样做。
这可以使用组 (我个人不喜欢)或通过定义
是期望的序列来实现。
- Clojure和HBase:通过扫描迭代懒惰
- 类型推断涉及返回类型,通配符和交集类型
- DateTimeFormatter基于周的年份差异
- 是否存在像“Set”这样的对象,它只能包含唯一的字符串值,还包含字符串值出现次数的计数?
- java.lang.ClassNotFoundException:org.glassfish.jersey.servlet.ServletContainer
- tomcat 6.0.24exception:无法加载com.mysql.jdbc.SQLError
- 在Eclipse中,如何多次运行JUnit测试用例
- 不能在JDBC PreparedStatement中使用LIKE查询?
- 比较Java中的日期