【问题标题】:Spring MVC - Mapping one error to multiple FieldsSpring MVC - 将一个错误映射到多个字段
【发布时间】:2013-08-19 03:26:43
【问题描述】:

在我的 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() 两次,第二次调用.b FieldError
  • 会在 UI 上添加另一条错误消息。我只想显示一条错误消息并突出显示两个字段
  • 好的,很抱歉,对此没有一个好的答案,但可能是 1 个全局错误消息(不是特定于字段的 FieldError)加上一个 FieldError 和一个空错误消息?听起来像 hack :-)
  • 尝试将 null 和空白字符串作为错误消息传递,但 spring mvc 足够聪明,可以对其抛出异常:) 对于每个错误,都需要错误消息。

标签: java spring-mvc


【解决方案1】:

一旦您检测到要显示验证消息并突出显示多个字段的条件,您可以使用以下代码显示常见/全局错误消息:

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

【讨论】:

  • 应该是errors.reject("your.error.code"),而不是#rejectValue,因为rejectValue方法至少需要两个参数。
  • @SachinKumar - 感谢您的指出。我已经更新了答案。
猜你喜欢
  • 2011-04-23
  • 2020-12-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-07-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多