2

form:update withspringrooでのファイルのアップロードに苦労しています。

作成部分には、Jose Delgadoが提供するform:multiタグを使用しました。カスタムform:multiタグは、enctype = "multipart / form-data"をフォームに追加し、正常に機能します。

問題は、更新フォームにファイルアップロード機能を提供する場合です。Spring Roo(おそらくSpring mvcですが、わかりません)は、デフォルトでenctype = "application / x-www-form-urlencoded"を更新フォーム(form:updateタグ)に設定します。アップロードフォームでenctype属性をenctype="multipart / form-data"に設定すると、サーバーはフォームの送信時に「udpate」メソッドではなく、コントローラーの「create」メソッドを実行します。

(単に)それを回避する方法はありますか?私はすでにそれにかなりの時間を費やしました、そして私はインスピレーションから自分自身を見つけています(多分それは一日の終わりだからです:)。

ご協力いただきありがとうございます、

敬具

4

1 に答える 1

3

OK...RequestMappingに少し問題があるようです。

何らかの理由で、form:updateタグでmultipart属性が「true」に設定されている場合、メソッドパラメータは「POST」に設定されます。

回避策として、createメソッドの先頭にある_methodパラメーターを確認します。「PUT」に設定されている場合は、updateメソッドの値を返します。

    @RequestMapping(method = RequestMethod.POST, produces = "text/html")
    public String create(@Valid ActionRequest actionRequest, BindingResult bindingResult, Model uiModel, HttpServletRequest httpServletRequest) {

        // Work around dispatcher bug: if the multipart attribute of the form is set to true,
        // submission of the update form routes to create method
        String toto = httpServletRequest.getParameter("_method");

        if(httpServletRequest.getParameter("_method").equals("PUT")){
            return this.update(actionRequest,bindingResult,uiModel,httpServletRequest);
        }
   ...
}
于 2012-08-29T12:25:09.887 に答える