Как добавить ошибку на Springform простой контроллер формы? - PullRequest
3 голосов
/ 23 июня 2010

У меня есть эта проблема в моих приложениях Spring MVC 2.5, и я не уверен, что мне делать.

Вот мой код:

public class AddStationController extends SimpleFormController {
 private SimpleStationManager stationManager;

 protected ModelAndView onSubmit(HttpServletRequest request,
   HttpServletResponse response, Object command, BindException errors)
   throws Exception {
  StationDetails detail = (StationDetails) command;
  //add to DB
  int return = stationManager.addStation(detail);

  //return value: 1 = successful, 
  //    if not = unsuccessful

  if(return != 1){
   //how can I add error so that when I display my formview ,
   //I could notify the user that saving to the db is not successful?
   showform();
  }
  return new ModelAndView("redirect:" + getSuccessView());
 }
}

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

И как справиться с этим в моем jsp?

Ответы [ 2 ]

6 голосов
/ 23 июня 2010

Сначала я подумал, что вы можете использовать валидаторы, но вместо этого я думаю, что вы можете сделать следующее:

public class AddStationController extends SimpleFormController {
 private SimpleStationManager stationManager;

 protected ModelAndView onSubmit(HttpServletRequest request,
   HttpServletResponse response, Object command, BindException errors)
   throws Exception {
  StationDetails detail = (StationDetails) command;
  //add to DB
  int return = stationManager.addStation(detail);

  //return value: 1 = successful, 
  //    if not = unsuccessful

  if(return != 1){
   //Account for failure in adding station
   errors.reject("exception.station.submitFailure", "Adding the station was not successful");
   showform(request, response, errors);
  }
  return new ModelAndView("redirect:" + getSuccessView());
 }
}

Затем в своей JSP вы можете сделать следующее:

<form:errors path="*">

Тогда любые ошибки, которые вы связываете, будут отображаться там.

0 голосов
/ 23 июня 2010

Есть несколько способов сделать это. Я предпочитаю не использовать метод showForm (), потому что я хочу больше контроля. Поэтому я делаю одно из следующего, я уверен, что на ваш вопрос будет дано несколько альтернативных ответов.

Если вы не хотите, чтобы произошла ошибка из-за определенного поля, вы можете просто отправить сообщение об ошибке на модель, подобную этой:

ModelAndView mav = new ModelAndView(this.getFormView());
mav.addObject(this.getCommandName(), command);
mav.addObject("errorMessage", "The thing you tried to do failed");
return mav;

Тогда в вашем JSP вы сделаете это:

<c:if test="${not empty errorMessage}">
  ${errorMessage}
</c:if>

Если у вас есть конкретное поле, вызвавшее ошибку, вы можете прикрепить ошибку к конкретному полю, например так (это отклоняет длину поля под названием alternateid):

errors.rejectValue("alternateId", "longerThan",
new Object[] { Integer.valueOf(2) }, "Please enter at least two characters.");
ModelAndView mav = new ModelAndView(this.getFormView());
mav.addAllObjects(errors.getModel());
mav.addObject(this.getCommandName(), command);
return mav;

Тогда в вашем jsp вы используете библиотеку тегов формы и делаете это:

<form:errors path="alternateId"/>

Предполагается, что вы используете библиотеку тегов пружинной формы.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...