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

私のコードに何か問題があります。このように使用すると、org.springframework.beans.NotReadablePropertyException: Invalid property 'callType' of bean class [org.springframework.web.servlet.ModelAndView]: Bean property 'callType' is not が発生します読み取り可能または無効なゲッター メソッドがあります: ゲッターの戻り値の型は、セッターのパラメーターの型と一致しますか? 例外。

プロパティcallTypeについては、ReportsCommandクラスではなく、春のModelAndViewクラスで検索しています.pbmである可能性があります.誰か教えてください...

4

2 に答える 2

1

検証にアノテーションを使用したい場合は、を使用したJSR-303検証に興味があるようです@Valid

http://static.springsource.org/spring/docs/current/spring-framework-reference/html/validation.html#validation-beanvalidation-overviewを参照してください

于 2012-06-11T15:34:39.757 に答える
1

それ以外の

fluctuationValidator.validate(modelAndView,result);

あなたが必要

fluctuationValidator.validate(model,result);

モデルは ReportsCommand オブジェクト

私が正しく理解していれば、検証したい実際のオブジェクトは ReportsCommand オブジェクトです。

@Valid アノテーションを使用し、initBinder メソッドをオーバーライドすることでバリデーターを設定して、コントローラーに Bean を検証させることができます。サンプルについては以下を参照してください

@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) {
       .....
      }
    }
于 2012-06-11T15:45:08.337 に答える