【发布时间】:2014-10-02 10:54:33
【问题描述】:
这是 DTO 对象的示例骨架。
public class MyDTO
{
List<Student> students=new ArrayList<>();
}
public class Student
{
String name;
Integer age;
// setter and getter methods
}
现在,用户有机会在列表中输入很多学生,并且任何学生详细信息都可能包含错误。可能的错误是学生年龄大于 25 岁,姓名中包含特殊字符等。
例如students[2].name有特殊字符,student[4].age>25,则为错误。现在,我想在这些字段下方显示错误并突出显示相应的字段。
<form th:field="${myDTO}">
<input type="text" th:field="*{students[0].name}" th:errorclass="fieldError"/>
<span class="error" th:if="${#fields.hasErrors('students[0].name')}" th:errors="*{students[0].name}"></span>
<input type="number" th:field="*{students[0].age}" min="15" max="25" th:errorclass="fieldError"/>
<span class="error" th:if="${#fields.hasErrors('students[0].age')}" th:errors="*{students[0].age}"></span>
</form>
我对在th:field 属性中添加什么感到困惑?当我像上面那样写时,结果就是这种类型的错误
Bean 名称的 BindingResult 和普通目标对象都不是 'students+'['+0+']'' 可用作请求属性。
在我的验证器中,我有这种类型的代码..
int idx=0;
for(Student st: students)
{
errors.pushNestedPath("students["+idx+"]");
ValidationUtils.invokeValidator(studentValidator, st, errors);
errors.popNestedPath();
idx++;
}
在StudentValidator 类中..
@Override
public void validate(Object obj, Errors errors) {
Student s=(Student) obj;
if(containsSpecialCharacters(s.name))
{
errors.rejectValue("name","name.containsSpecialCharacters",null,null);
}
if(s.age>25 || s.age<15)
{
errors.rejectValue("age","age.invalid",null,null);
}
}
现在,我的问题是
如何显示这些错误,突出显示相应的字段?
在
th:field标签中放什么?接下来,学生记录是动态添加的,也就是之前不存在的学生行,点击Add student按钮,用户就可以添加学生了。现在,即使
th:field也必须更新。怎么做,因为它与之前完成但不是在页面加载后完成的thymeleaf模板处理有关?
希望您尽快回复。
【问题讨论】:
标签: java spring spring-mvc thymeleaf