gpt4 book ai didi

java - Spring 3.1.1.RELEASE 数据绑定(bind) : Error when validating submitted form

转载 作者:塔克拉玛干 更新时间:2023-11-02 20:13:23 26 4
gpt4 key购买 nike

自从将我的 web 应用程序从 Spring 3.0.5 升级到 3.1.1 后,我在验证我的 form-b​​eans 时不得不面对一些严重的错误。我之前配置的 validator 不再像它们应该的那样工作。问题是 org.springframework.validation.Errors 类中的方法 getFieldValue(String fieldname) 没有返回原始的绑定(bind) bean 值,就像它应该的那样(之前也是如此)。

这是我的 form-b​​ean 的样子:

public class PersonBean extends BaseFormBean {

private String firstname; // getters and setter omitted...

private String lastname; // getters and setter omitted...

private Integer age; // getters and setter omitted...

public PersonBean() {}

@Override
public void validateForm(Errors errors) {
WebValidationUtils.rejectIfEmptyOrWhitespace(errors, "firstname", "validator.requiredvalidator.lbl", "field required");
WebValidationUtils.rejectIfEmptyOrWhitespace(errors, "lastname", "validator.requiredvalidator.lbl", "field required");
WebValidationUtils.rejectInvalidIntValue(errors, "age", "validator.std.age", "invalid age", false);
}
}

被调用的 WebValidationUtils 类有一些用于检查 bean 属性的标准方法。该错误仅发生在非字符串值上,例如 Integer 类型的属性 age。它也发生在 Collection(s) 上。

以下代码片段显示了如何在我的实用程序类中验证整数值:

import org.springframework.validation.Errors;
...

public abstract class WebValidationUtils {
...
public static void rejectInvalidIntValue(Errors errors, String field, String errorCode, String defaultMessage){
Assert.notNull(errors, "Errors object must not be null");
Object value = errors.getFieldValue(field); // returns the string value (type: java.lang.String)
Class<?> fieldType = errors.getFieldType(field); // returns the class Integer!
if (value == null || !value.getClass().equals(Integer.class) || ((Integer)value).intValue() <= 0){
errors.rejectValue(field, errorCode, null, defaultMessage);
}
}
}

bean 本身有正确的值绑定(bind)...

我是否必须在我的 context-servlet.xml 中配置一些额外的 spring bean 才能实现与 3.0.5 中相同的行为?

编辑:官方Spring Doku对于方法“getFieldValue(...)”表示

Return the current value of the given field, either the current bean property value or a rejected update from the last binding.

所以我不知道为什么这个方法返回一个字符串值而不是传播的 Integer 类型的 bean 值...

最佳答案

似乎您有绑定(bind)错误,所以 getFieldValue() 返回 FieldError.getFieldValue(),它返回导致绑定(bind)错误的值。这是预期的行为。

您可以使用 getRawFieldValue() 获取保存属性的值。此方法始终使用 PropertyAccessor 返回值。

关于java - Spring 3.1.1.RELEASE 数据绑定(bind) : Error when validating submitted form,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10589017/

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