コンピュータクワガタ

かっぱのかっぱによるコンピュータ関連のサイトです

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