Validator + MVC + REST :: проблемы с обновлением - PullRequest
0 голосов
/ 29 июля 2010

Я пытаюсь собрать свое приложение, используя REST и Spring MVC. Для некоторых лиц у меня есть специальная страница для обновления. После отправки данных оно подтверждается. Если ошибок нет, он перенаправляется на просмотр этого объекта, в противном случае редактирует страницу. Как я должен передавать данные (сущность и результат валидатора) между контроллерами?

здесь реализация с очень плохой практикой.

@RequestMapping(method = RequestMethod.PUT, value = "/workers/{id}")
public ModelAndView update(@PathVariable final Long id, @Valid Worker entity, Errors errors, NativeWebRequest request) {
    ModelAndView model = new ModelAndView();
    entity.setId(id);
    if (errors.hasErrors()) {
        request.setAttribute("entity", entity, RequestAttributes.SCOPE_SESSION);
        request.setAttribute("errors", errors.getAllErrors(), RequestAttributes.SCOPE_SESSION);
        model.setViewName("redirect:/workers/" + entity.getId()+ "/edit");
    } else {
        System.out.println("upd-done");
        service.update(entity);
        model.setViewName("redirect:/workers/" + entity.getId());
        model.addObject(entity);
    }
    return model;
}

@RequestMapping(method = RequestMethod.GET, value = "/workers/{id}/edit")
public ModelAndView updatePage(@PathVariable Long id, NativeWebRequest request) {
    ModelAndView model = new ModelAndView();
    DomainObject entity = (DomainObject)request.getAttribute("entity", RequestAttributes.SCOPE_SESSION);
    model.addObject("entity", entity != null ? entity : service.get(id));
    model.setViewName(names.provideViewName(Pages.EDIT));
    return model;
}

здесь форма для редактирования

<form id="entity" action="/workers/6" method="post"><input type="hidden" name="_method" value="PUT"/>
foo <input id="foo" name="foo" type="text" /></td>
<input type="submit" value="Save Changes" />
</form>

Спасибо.

1 Ответ

1 голос
/ 31 августа 2010

Если есть ошибки и вам нужно отправить пользователя обратно в представление формы, просто используйте то же имя представления, которое вы использовали в методе GET / edit («names.provideViewName (Pages.EDIT)»). Вы захотите изменить это представление, чтобы проверить наличие ошибок в модели и, если это так, показать их пользователю.

@RequestMapping(method = RequestMethod.PUT, value = "/workers/{id}")
public ModelAndView update(@PathVariable final Long id, @Valid Worker entity, Errors errors, NativeWebRequest request) {
    ModelAndView model = new ModelAndView();
    entity.setId(id);
    if (errors.hasErrors()) {
        model.addObject("entity", entity);
        model.addObject("errors", errors);
        model.setViewName(names.provideViewName(Pages.EDIT));
    } else {
        System.out.println("upd-done");
        service.update(entity);
        model.setViewName("redirect:/workers/" + entity.getId());
        model.addObject(entity);
    }
    return model;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...