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側で上手くやればいいけど、明日。