Spring MVC - 将一个错误映射到多个字段

4
在我的bean中,我有一个列表。
List<SomeClass> values = new ArrayList<SomeClass>();

SomeClass{
 int a;
 int b;
 int c;
}

我的验证代码 -

int i =0
for(SomeClass entry: values){
  if(entry.getA() < 0 && entry.getB() < 0 && entry.getC() > 0){
       bindingResult.addError(newFieldError("bean", "values[" + i"].a", values.get(i).getA(),false,new String []{"error.code"}, null, null));
  }
}

error.code 映射为字符串 "如果 C 大于零,则 A 和 B 必须大于零"

问题是我想将错误代码映射到 values[i].avalues[i].b,以便这两个字段在 UI 上突出显示。

FieldError 构造函数接受 String field 而不是 String [] fields

是否有办法为同一错误添加两个错误字段?

谢谢


为什么不直接调用 addError() 两次,第二次使用 .bFieldError - MattR
UI上会添加另一条错误信息。我想只显示一条错误信息并突出显示两个字段。 - Coder
好的,明白了。很抱歉我对此没有一个好的答案,但也许可以使用一个全局错误消息(而不是特定于字段的FieldError),再加上两个带有空错误消息的FieldError?听起来像是一种权宜之计 :-) - MattR
尝试将null和空字符串作为错误消息传递,但Spring MVC足够智能,能够针对每个错误抛出异常 :) 每个错误都需要一个错误消息。 - Coder
1个回答

0
一旦您检测到要显示具有多个字段突出显示的验证消息的条件,您可以使用以下代码显示通用/全局错误消息:
if ("your error condition"){
    errors.reject("your.error.code");
}

然后使用布尔标志更新模型,这些标志对应于应该突出显示的字段。

model.addAttribute("xFieldHighlighted", true);
model.addAttribute("yFieldHighlighted", true);

然后使用JavaScript来突出显示字段。下面是一个JQuery示例:
var xFieldHighlighted = '${xFieldHighlighted}';
var yFieldHighlighted = '${yFieldHighlighted}';

if (xFieldHighlighted == 'true'){
    $('#xFieldID').addClass('cssError');
}

if (yFieldHighlighted == 'true'){
    $('#yFieldID').addClass('cssError');
}

1
应该使用errors.reject("your.error.code"),而不是使用#rejectValue方法,因为rejectValue方法需要至少两个参数。 - Sachin Kumar
@SachinKumar - 谢谢你指出。我已经更新了答案。 - aram063

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接