2011-11-15 16 views
0

これは本当に簡単な質問です。私はSpring MVCの@Controllerに巨大なのHTMLフォームを送信するためのベストプラクティス何知っていただきたいと思いSpring MVCと "ビッグフォーム"

(ようにリストとして巨大= 20の以上のフィールド/複雑なフィールドと...)

@RequestMapping(value = "/users" , method = RequestMethod.POST) 
    public ModelAndView saveUser(Locale locale, @Valid User user, BindingResult result) { 

     if (result.hasErrors()) { 

      logger.error("Errori form:: " + result.getErrorCount()); 

     } else { 

      logger.info("Utente salvato"); 
      userService.saveUser(user); 

     } 
     ... 
     return mav; 
    } 

といくつかの他は、より複雑なSimpleFormControllerをこのように使用します:誰かが(公式の例から)このアプローチを使用するので、私は少し混乱してい Spring-MVC forms on GAE

私は確かに最初の方法を好むが、私は多くの "FormBeans"、無駄なDTOを作らなければならないと心配している。

違いを説明してアドバイスをいただけますか?

ありがとうございます。

答えて

1

この例では、Springの検証を使用しています。私はあなたが春のマニュアルやいくつかの助けを見なければならないと思っています。それは非常に基本的ですが、一般的な考え方は、春があなたのためにフォームを検証するということです。

まず、Pojoを作成する必要があります(フォームからすべての入力を取得し、ゲッターとセッターでクラスを作成する必要があります)。

次に、通常のフォームとは少し異なる春フォームを使用する必要があります。基本的な考え方は、オブジェクト(あなたの場合はUser)をフォームにマップすることです。そして、各入力は、Pojoのフィールドにマッピングされます。

その後、アノテーションを付けて検証をPojoに追加します。

@Size(max = 10) 
private String name; 

たとえば、この注釈のサイズは、フィールド名が最大10文字でなければならないことを示します。 この検証は、@Validアノテーションでチェックされます。

次に、hasErrorsが呼び出されると、フォームにエラーがある場合に取得できます。

+0

助けてくれてありがとうございます。これは完全な答えではありません。他のソリューションとの違いは何ですか?私はなぜSimpleFormControllerを使うべきですか? –

+1

正直言って、私はSimpleFormControllerを使用したことはありませんでした。また、Spring Sourceでインスタンス化しようとしましたが、廃止予定とマークされています。投稿したリンクを見ると、基本的に同じですが、違いはコントローラのマッピングです。 SimpleFormControllerのonSubmitにはRequestMappingがありません(私は自動的に行われますか?)、あなたが投稿したこのコントローラーはそれを行います。 SimpleFormControllerで何を他のオブジェクト(ユーザ)にコマンドをキャストしているのか、ここでは直接取っているので同様です。両方の例を注意深く見ることをお勧めします。 – dgmora