2012-06-11 3 views
0

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

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" /> 

Любая вещь неправильно в моем code.If я использую как это, я ма получать org.springframework.beans.NotReadablePropertyException: Недопустимое свойство «CALLTYPE» из класса bean [org.springframework.web.servlet.ModelAndView]: Свойство bean 'callType' не читается или имеет недопустимый метод getter: соответствует ли тип возвращаемого значения getter типу параметра setter? Исключение.

Для объектов CALLTYPE это не ищущего в классе ReportsCommand вместо этого он ищет весной ModelAndView class.What может быть pbm.Can кто-нибудь сказать мне ...

ответ

1

Вместо

fluctuationValidator.validate(modelAndView,result);

вам нужно

fluctuationValidator.validate(model,result);

объектная модель является ReportsCommand

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

Возможно, ваш контроллер проверяет ваш компонент, используя аннотацию @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) { 
     ..... 
     } 
    }