1

結果のWebページのような空の日付でフォームを送信すると、検証エラーが表示されるという問題があります。

Failed to convert property value of type java.lang.String to required type 
java.util.Date for property dateFin; nested exception is 
java.lang.IllegalArgumentException: Could not parse date: Unparseable date: ""

私のコントローラーは次のようになります。

    @Controller
    @SessionAttributes
    @Lazy
    public class MyController extends AbstractMVPAction {
        @RequestMapping(value = "/secured/cp/saveProgram")
        public String enregistrerProgramme(@ModelAttribute Program program,
                 BindingResult bindingResult, ModelMap model){
            if(bindingResult.hasErrors()){
                model.put("program", program);
                return "/secured/cp/showProgram"
            }else{
                // ... saves the programme
                model.put("program", null);
                return "/secured/cp/backToOtherPage"
            }
        }
        @InitBinder
        public void initBinder(WebDataBinder binder) {
            binder.registerCustomEditor(Date.class, new CustomDateEditor(
                    new SimpleDateFormat("dd/MM/yyyy"), false));
        }
    }

メソッドをデバッグすると、オブジェクトが正常であることがわかります。行った変更は適切に報告され、日付は null ですが、bindingResult.hasErrors() は true を返し、私によればそうすべきではありません。

Program オブジェクトと @Valid アノテーションにいくつかの検証アノテーションがありましたが、それらをすべて削除してもまだ問題があります。

私は同様の問題をたくさん読みましたが、解決策は@InitBinder/CustomDateEditorです。そこにあり、機能していると思います。日付は希望どおりに表示され(追加する前はそうではありませんでした)、空でない場合は送信できます。

前もって感謝します、私は夢中になり始めています...

4

1 に答える 1

3

空の文字列を明示的に禁止する CustomDateEditor を作成しました。使用しているコンストラクターの Javadoc を確認してください。ブール引数が false の場合、そのエディターに空の文字列を渡すと、表示されている IllegalArgumentException が発生します。

これを試して:

    @InitBinder
    public void initBinder(WebDataBinder binder) {
        binder.registerCustomEditor(Date.class, new CustomDateEditor(
                new SimpleDateFormat("dd/MM/yyyy"), false));
    }
于 2013-07-11T19:11:35.800 に答える