2015-11-22 3 views
0

У меня есть обработчик страницы отображения, который показывает страницу. Этот метод не для представления формы, это просто для отображения страницы.BindingResult не работает в режиме отображения (Spring MVC)

Моя проблема в том, что даже на Диске есть некоторые глобальные сообщения об ошибках, которые могут произойти. Так как единственный способ показать ошибки, чтобы добавить их к BindingResult, я добавил/BindingResult пары пары Модели моего метод Дисплея:

public ModelAndView display(final HttpServletRequest request, 
          @ModelAttribute("model") Model model, 
          BindingResult bindingResult) { 

Тогда, скажем, добавить ошибку в мой BindingResult,

bindingResult.addError(new ObjectError("", "message"); 

Но это не сработает - показанный JSP не имеет моего сообщения. Этот подход работает на Save, но он не отображается на дисплее, может быть, потому, что я не представляю какую-либо форму, и поэтому у меня не может быть BindingResult.

Как я могу показать общую ошибку в методе, который не отправляет форму? Почему BindingResult не работает в этом методе отображения?

ответ

0

Вам может понадобиться использовать JavaScript для отображения ошибок

1

Как вы уже заметили, к сожалению, BindingResult параметров только получить заселены рамками во время связывания - то есть в точке, что ваш объект команды получает заселенную с параметрами запроса.

Это немного ляп, но вы можете имитировать структуру добавив BindingResult параметр модели, добавив параметр себя явно, используя ожидаемые ключевые:

public ModelAndView display(MyModel model, BindingResult errors) { 
    errors.addError(new ObjectError("", "message")); 

    return new ModelAndView("myViewName", new ModelMap() 
     .addAttribute("myModelKey", model) 
     .addAttribute(BindingResult.MODEL_KEY_PREFIX + "myModelKey", errors)); 
} 

<form:/> TagLib Spring теперь будет относиться к ошибкам вас добавлено так, как если бы они произошли при привязке.

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

+0

Спасибо. Наше решение состоит в том, чтобы просто сохранить пользовательский атрибут «исключения», который мы показываем индивидуально в области «Сообщения». Поэтому для общих исключений мы избегаем готовых тегов ошибок Spring, и они не происходят из структур Spring Errors/BindingResult, а из наших собственных. –

Смежные вопросы