Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Java EE (J2EE) и Spring > Как перезаписать сообщения ошибки валидации?


Автор: Ares4322 29.3.2010, 12:50
Доброго времени суток!
Использую Struts2 и валидацию типа double. При вводе не-double значения выводится англоязычное сообщение. Можно ли сообщение переписать на русский и если можно, то как?

Автор: MaxPayneC 29.3.2010, 17:59
Код

private Applicant applicant;

....

    @Validations(
            conversionErrorFields = {
                    @ConversionErrorFieldValidator(fieldName = "applicant.birthDate", message = "Недопустимая дата рождения."),
                    @ConversionErrorFieldValidator(fieldName = "applicant.salary", message = "Недопустимая заработная плата.")}
    )
@Override
public String execute()
{
....
}

//тут геттер и сеттер для applicant

Автор: Ares4322 30.3.2010, 07:53
Спасибо. Но я имел ввиду другое. Struts выводит свои сообщения. На английском. Как их убрать? Искал в исходниках библиотеки, но не нашел

Автор: MaxPayneC 30.3.2010, 08:22
То есть как сделать так, чтобы вместо, а не в дополнение к сообщениям стратс :"Invalid field value "..." выводился ваш текст?

Автор: Ares4322 30.3.2010, 08:28
Так точно. Именно это)

Автор: MaxPayneC 30.3.2010, 09:08
Способ кривой, но лучше я не знаю:
1. В том же пакете, что и класс-экшн, содержащий валидируемые поля, создаем файл package.properties.
2. В нем делаем записи вида
Код

invalid.fieldvalue.birthdate=\u041d\u0435\u0434\u043e\u043f\u0443\u0441\u0442\u0438\u043c\u0430\u044f \u0434\u0430\u0442\u0430 \u0440\u043e\u0436\u0434\u0435\u043d\u0438\u044f.
invalid.fieldvalue.graduate_id=\u0417\u0430\u043f\u0440\u043e\u0448\u0435\u043d\u043d\u044b\u0439 \u0432\u044b\u043f\u0443\u0441\u043a\u043d\u0438\u043a \u043d\u0435 \u043d\u0430\u0439\u0434\u0435\u043d.

Где то, что после второй точки (birthdate, graduate_id) - это названия полей экшна.
Так как ява не понимает юникода в проперти-файлах, прогоняем эти файлы через утилиту native2ascii. Где ее найти в винде, точно не знаю, в линукс JVM от сан прописывает ее в path.
Код

native2ascii package.properties t && mv t package.properties

После этого мы в файле должны увидеть что-то вроде того, что написано в "коде" выше.

Способ второй, для ajax-валидации, которой пользовался я (тоже кривой):
Я переписал javascript-метод, который добавляет к полям формы ошибки валидации так, чтобы он добавлял только последнюю ошибку:
Код

/**
 * Метод добавляет к полям формы сообщения об ошибках.
 *
 * @param form Форма, подвергшаяся валидации.
 * @param errors Объект, содержащий сообщения об ошибках.
 */
function showValidationErrors(form, errors)
{
    StrutsUtils.clearValidationErrors(form, errors);

    var firstNode = StrutsUtils.firstElement(form);
    var xhtml = firstNode.tagName.toLowerCase() == "table";
    if (errors.fieldErrors)
    {
        for (var fieldName in errors.fieldErrors)
        {
            if (errors.fieldErrors[fieldName].length > 0)
            {
                var i = errors.fieldErrors[fieldName].length - 1;
                if (xhtml)
                {
                    addErrorXHTML(form.elements[fieldName], errors.fieldErrors[fieldName][i]);
                }
                else
                {
                    addErrorCSS(form.elements[fieldName], errors.fieldErrors[fieldName][i]);
                }
            }
        }
    }
}

Тогда появлялась только последняя случившаяся ошибка (та, сообщение для которой я указывал в аннотациях).

Автор: Ares4322 30.3.2010, 09:27
Работает, спасибо) А где вообще про это у них написано?
И еще. У меня почему то это сообщение выводится 2 раза. Почему так?

Автор: MaxPayneC 30.3.2010, 09:51
Эм.. сообщение два раза выводится скорее всего потому, что валидация проходила два раза. Без дебага и детального изучения вашего приложения сказать точнее не могу.

Автор: Ares4322 30.3.2010, 10:07
Я извиняюсь за оффтопик, но Вы раньше использовали Стратс2 или сейчас продолжаете? Мне просто интересно, кто-нибудь начинает новые проекты на нем или только старые доделывают?

Автор: Ares4322 30.3.2010, 12:25
проблему с 2мя сообщениями решил, поставив в package.properties пробел вместо сообщений ошибок)

Автор: MaxPayneC 30.3.2010, 12:54
И раньше использовал, и сейчас продолжаю. Если проблема решена - пометьте тред как решенный.

Автор: Ares4322 1.4.2010, 09:06
Спасибо!

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)