Validatorでエラーになった項目の色を変えてみる。
全部できなかったけど、調査は完了。目途は付いた。
Validatorは結局Strutsのorg.apache.struts.validator.FieldChecksクラスでチェックしている。
そのチェックメソッドは引数に、requestとfieldを持っているので、field.getKey()でチェックする項目のname属性の値を取得できる。また、requestがあるのでrequest.setAttributeしてやればエラーの出たname属性の値を画面に戻すことができる。
以上のことから、やりたいことはできそう。
明日、ちゃんと実装してみるけど以下のように書く。
public static boolean validateRequired(Object bean,
ValidatorAction va, Field field,
ActionMessages errors,
Validator validator,
HttpServletRequest request) {
String value = null;
if (isString(bean)) {
value = (String) bean;
} else {
value = ValidatorUtils.getValueAsString(bean, field.getProperty());
}
if (GenericValidator.isBlankOrNull(value)) {
errors.add(field.getKey(), Resources.getActionMessage(validator, request, va, field));
// ここから追加
List<String> list = (List<String>) request.getAttribute("validateErrorKey");
if (list == null) {
list = new ArrayList<String>();
}
list.add(field.getKey());
request.setAttribute("validateErrorKey", list);
return false;
} else {
return true;
}
}あとは、JSP側で上手くやればいいけど、明日。