gpt4 book ai didi

java - 错误消息的顺序不正确

转载 作者:塔克拉玛干 更新时间:2023-11-03 04:28:23 25 4
gpt4 key购买 nike

在我的 spring MVC 验证中,错误消息的顺序随机变化,我希望消息的顺序与它们在页面上出现的顺序相同。

我的 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;

我还在我的 Controller 中附加了一些自定义错误:

   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;
}

..

当我在表单上点击提交时,消息的顺序不断变化。

我使用以下方法在我的 View 中呈现错误:

        <#list errors as error>
<li>${error.defaultMessage}</li>
</#list>

这可以修复吗?

最佳答案

这是通过验证组实现的,Spring 支持它。您正在使用 @Valid 注释,但它应该是 @Validated 才能使用验证组:

 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 中的每个条目都是一个接口(interface)。

编辑

因此,如果您希望首先验证帐户名,则为其创建一个接口(interface):

public interface AccountNameGroup{}

然后在验证组界面中,这将是第一个界面:

@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.

这样会先验证账户名

关于java - 错误消息的顺序不正确,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11804879/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com