проверка формы с использованием весенних аннотаций

Я новичок в Spring. Я использую Spring 3.0.5 RELEASE. Мое требование состоит в том, что я хочу проверить поля в форме, используя аннотации Spring. Код, который я использую для этого, выглядит следующим образом. Это класс валидатора, реализующий интерфейс валидатора.

public class FluctuationValidator implements Validator{

    @Override
    public boolean supports(Class<?> clazz) {
         return ReportsCommand.class.isAssignableFrom(clazz);
    }
    @Override
    public void validate(Object command, Errors errors) {
        ReportsCommand reportsCommand = (ReportsCommand) command;
        System.out.println("Inside the validate method of validator class");
        ValidationUtils.rejectIfEmpty(errors, "callType", "PackageNameIsRequired");
    }
    }

Здесь ReportsCommand — это класс, в котором есть данные, введенные в форму. В контроллере код выглядит следующим образом.

@Autowired
    FluctuationValidator fluctuationValidator;
public ModelAndView showForm(@ModelAttribute("reports") ReportsCommand model, ModelAndView modelAndView,BindingResult result,
            HttpServletRequest request, HttpServletResponse response) throws Exception {

        fluctuationValidator.validate(modelAndView,result);
        if (result.hasErrors()) {
           modelAndView = new ModelAndView("report-generate-form");
        return modelAndView;
        } 
       }

В файле jsp я использую

<form:errors path="callType" cssClass="error" />

Что-то не так в моем коде. Если я использую это, я получаю org.springframework.beans.NotReadablePropertyException: недопустимое свойство callType класса bean [org.springframework.web.servlet.ModelAndView]: свойство Bean callType не доступен для чтения или имеет недопустимый метод получения: соответствует ли тип возвращаемого значения метода получения типу параметра метода установки? Исключение.

Для свойства callType он не ищет в классе ReportsCommand, а ищет в весеннем классе ModelAndView. Что может быть pbm. Может ли кто-нибудь сказать мне...


person user1434746    schedule 11.06.2012    source источник


Ответы (2)


Если вы хотите использовать аннотации для проверки, похоже, вас может заинтересовать проверка JSR-303 с использованием @Valid.

См. http://static.springsource.org/spring/docs/current/spring-framework-reference/html/validation.html#validation-beanvalidation-overview

person atrain    schedule 11.06.2012

Вместо

fluctuationValidator.validate(modelAndView,result);

тебе нужно

fluctuationValidator.validate(model,result);

модель, являющаяся объектом ReportsCommand

Фактический объект, который вы хотите проверить, является объектом ReportsCommand, если я правильно понял.

Вы можете сделать так, чтобы ваш контроллер проверял ваш bean-компонент, используя аннотацию @Valid и устанавливая валидатор, переопределяя метод initBinder. См. ниже образец

@Controller    
public class MyController{
      @Autowired
      private MyValidator myValidator;

      @Override
      @InitBinder
      public void initBinder(WebDataBinder binder) {
        binder.setValidator(myValidator);
      }

      @Override
      @RequestMapping(method = RequestMethod.POST)
      public String create(@ModelAttribute("myBean") @Valid MyBean myBean, 
                BindingResult bindingResult,
                Model uiModel) {
       .....
      }
    }
person fmucar    schedule 11.06.2012