Итак, у меня есть эта страница search.jsp в где пользователь может искать товар по двум критериям полей (название товара и категория, к которой относится товар):
Код: Выделить всё
Search
Search Products
Name:
Category:
Search Results:
- Пользователь должен вставить название продукта или категорию
Длина имени должна состоять как минимум из 3 символов. - Пользователь может выбирал только по имени или категории, но не по какому-либо другому полю объекта модели Продукт
Код: Выделить всё
package com.packtpub.springmvc.chocolatestore;
import org.springframework.stereotype.Component;
import org.springframework.util.StringUtils;
import org.springframework.validation.Errors;
import org.springframework.validation.Validator;
import com.packtpub.springmvc.chocolatestore.model.Product;
@Component
public class ProductSearchValidator implements Validator {
@Override
public boolean supports(Class clazz) {
return Product.class.isAssignableFrom(clazz);
}
@Override
public void validate(Object target, Errors errors) {
Product product = (Product) target;
String name = product.getName();
if (!StringUtils.hasLength(name) && (product.getCategory() == null || product.getCategory().getId() == 0)) {
errors.rejectValue("name", "required", "Either name or category is required");
} else if ((product.getCategory() == null || product.getCategory().getId() == 0) && name.trim().length() < 3) {
errors.rejectValue("name", "tooShort", "Please enter at least 3 letters");
}
}
}
Хорошо, метод validate() мне довольно ясен (он реализует предыдущие 3 указанных ограничения) .
Я не могу понять, как именно метод supports() работает:
Код: Выделить всё
@Override
public boolean supports(Class clazz) {
return Product.class.isAssignableFrom(clazz);
}
Подробнее здесь: https://stackoverflow.com/questions/324 ... rface-work
Мобильная версия