Play Framework: применяется ли автоматическая проверка методов контроллера? - PullRequest
1 голос
/ 05 марта 2012

У меня возникла проблема с проверкой параметров, передаваемых методу контроллера.

Следуя совету из учебника, я использую один и тот же метод контроллера для «сохранения» и «создания нового» объекта. Смотрите пример в http://www.playframework.org/documentation/1.2.4/guide9

Итак, мой метод контроллера выглядит так:

public static void saveEntity(long l, Long itemId,  
  @Required(message="error.shouldspecifyname") String name, 
  @Required(message="error.shouldspecifycategory")  String category)

Если 'itemId' не является частью данных, отправляемых через HTTP-запрос - предполагается, что он установлен на 'null'.

К сожалению, похоже, что "Play" - это автоматически , добавив ошибку проверки для параметра "пропущено".

При просмотре списка ошибок валидации каждый раз, когда itemId равен нулю - я получаю сообщение об ошибке Неверное значение для поля itemId

Это документированное поведение? Любой способ переопределить его или «избавиться» от ошибки.

Я обрабатываю ошибки просто используя перенаправление, например:

if(validation.hasErrors() ) 
{

            validation.keep();
            showSomePage();         
}

Таким образом, ошибки отображаются «вне контекста», которые они генерируют. Вот почему меня беспокоит «автоматическая» ошибка.

Спасибо за любую подсказку.

1 Ответ

1 голос
/ 05 марта 2012

Скорее всего, он не может проверить itemId, потому что он объявлен как Long, вы уверены, что у вас есть "Long" и не просто "long"?Мы используем валидацию с контроллерами везде, и она работает с @Required и передала "null" значениям "Long".

В худшем случае вы можете удалить ошибку из объекта валидации на основе ключа "itemId", также если выЕсли вы используете контроллер для сохранения объекта модели, вы можете использовать:

public static void saveEntity(@Required @Valid MyEntity entity) {
if(validation.hasErrors() ) {
  validation.keep();
  showSomePage();         
}
entity.save();
}

Он автоматически перехватит ваши изменения внутри существующего объекта, если вы передадите идентификатор со страницы с помощью:

<input type="hidden" name="myEntity.id" value="${myEntity.id}">
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...