2011-06-24 7 views
1

jQueryのポストリクエストを介してカスタムのjavascriptオブジェクト(実際にはJSONオブジェクトの配列)をスプリングコントローラに送信しようとしています。 "bla-blaと一致するエディタまたは変換方法が見つかりません"というエラーが発生し、サーバー側でエラーが発生します。文字列からサーバー側のオブジェクトに変換することはできません。 私はthisthisの例を見つけましたが、それをまとめて動作させることはできません。 PropertyEditorのどのメソッドをオーバーライドする必要がありますか? 誰かがどの例へのリンクを知っていますか? ありがとうございます。Spring MVC一致するエディタまたはコンバート方法が見つかりませんでした

コントローラー:

private class AddressFormEditor extends PropertyEditorSupport { 
    protected Object convertElement(Object element) 
    { 
     String form = ""; 

     if (element instanceof String) 
       form = (String) element; 
     Logger logger = Logger.getLogger(getClass().getName()); 
     logger.warning(form); 
     return form != null ? new AddressForm(form) : null; 
    } 
} 

@InitBinder 
protected void initBinder(HttpServletRequest request, ServletRequestDataBinder binder) throws Exception 
{  
     binder.registerCustomEditor(AddressForm.class, new AddressFormEditor()); 
} 
@RequestMapping(value = "/save", method = RequestMethod.POST) 
    public ModelAndView saveUser(@ModelAttribute UserForm form, HttpServletResponse response) {...} 

ユーザーフォーム:

public class UserForm extends BaseForm { 
private Long id; 
private String login; 
private String password; 
private String confirmPassword; 
private String type; 
private String franchise; 
private String roles; 
private String firstName; 
private String lastName; 
private String salutation; 
private String position; 
private String birthDate; 
private String passportNumber; 
private String passportIssueBy; 
private String passportIssueDate; 
private String passportExpireDate; 
private String nationality; 
private AddressForm[] addresses; 
private String notes; ... } 

jQueryのリクエスト:

var data = $('#userForm').serializeObject(); 
     data.addresses = addresses; 
     $.ajax({ 
      traditional: true, 
      type: 'POST', 
      url: url + 'save', 
      data: data, 
      success: function(response) { 
       if (response) { 
        initializeUser(response); 
        hideWait(); 
       } 
       else { 
        showUsers(); 
        $('#closeUserBtn').click(); 
       } 
      }, 
      error: function() { 
       error(); 
       hideWait(); 
      } 
     }); 

ロガーは、アドレスが '[オブジェクトのオブジェクト]' ですが、実際に有効な配列が送信されたと書いていますサーバーへ

+1

多分いくつかのコードが表示されます – Ibu

+0

問題は、私は文字列のサーバー側のオブジェクトのプロパティエディタ – nKognito

答えて

3

org.springframework.beans.propertyeditors(春豆の瓶の中にある)のエディタを見てください。これには、スプリングが付いている組み込みのエディタが含まれています。

は基本的には、それぞれ文字列としてsetAsText()getAsText()にあなたをできるように読んオブジェクトの文字列からと書き込みオブジェクトを上書きする必要があります。

CurrencyEditorは、非常に単純な例として役立ちます。 CustomDateEditorは、少し複雑なものとして機能する可能性があります。配列の例については、例えばClassArrayEditorを見てください。


しかし、これについて移動する最良の方法は、代わりにJSONを自分で解析するJSONのマッピング技術を使用することです。見てくださいthis post

+0

あなたの返信ありがとうございます。問題は、ModelAttributeをRequestBodyに変更すると、ModelAndViewオブジェクト(415エラー)に応答できないということです。 @RequestBodyを入力paramおよびModelAndViewを出力として取得する方法はありますか?ありがとう – nKognito

+0

'@ RequestBody'として入力を読み込み、' @ ModelAndView'を返しても問題ありません。あなたはそれをテストしましたか? –

+0

返信いただきありがとうございます。今すぐok、log4jはどこに問題があるのか​​理解するのを助けました。 – nKognito

関連する問題