2017-01-24 10 views
1

私はJSPフォームで正常に使用しているPOJOを持っています。私はフォームを表示することができ、結果を返信することができます。Spring MVC Beanの変換

<form:form method="post" class="form-horizontal" id="viewForm" 
      action="${pageContext.request.contextPath}/FooAdmin/saveFoo" modelAttribute="FooAdminWebDTO"> 

     <div class="form-group"> 
     <form:label class="col-sm-2" path="FooDTO" for="FooDTO" required="true">XYZ:</form:label> 
     <form:input class="col-sm-5" path="FooDTO" id="FooDTO" type="number" value="${FooAdminWebDTO.FooDTO.FooXYZ}" required="true"/> 
    </div> 

    <div class="form-group"> 
     <form:label class="col-sm-2" path="success" for="success" required="true">Success:</form:label> 
     <form:input class="col-sm-5" path="success" id="success" type="text" value="SUCCESS" required="true"/> 
    </div> 

問題は私のPOSTエリアにあります。ここではmodelAttribute豆これは私のJSPページから除いている

public class FooAdminWebDTO implements Serializable { 

private static final long serialVersionUID = -5296961362891142744L; 

private List<FooDTO> FooDTOList; 
private String success = "success"; //..etc 

です。私は正常に正しいコントローラメソッド当たっています:

@RequestMapping(value = "/FooAdmin/saveFoo", method = RequestMethod.POST) 
public ModelAndView saveFooByID(@ModelAttribute("FooAdminWebDTO") FooAdminWebDTO s, BindingResult bindingResult) { 
    return new ModelAndView(); 
} 

をしかし、予想通り、私は春で満たされている成功フィールドの内容を見ています。成功フィールドは単純な文字列です。 (他のすべての複合フィールドはNULLです)。ここで

はオブジェクトです:FooDTO:

@JavascriptMappable 
public class FooDTO implements Serializable { 

private static final long serialVersionUID = -5974170234812308892L; 
private String FooDescription; 
private int additionQuantity; 

など。

は、誰かがこれを行う方法の私を導くことができますしてください?私は構成のためにXMLを使用しているので、configを含むすべての答えは、このことを念頭に置いてください。私はかなり深くネストされたオブジェクトを持っていて、オブジェクトを受信POSTオブジェクトにバインドする方法が必要です。

ありがとうございます。

+0

コントローラのオブジェクト属性 'productAdminWebDTO'を設定しましたか?私はあなたが 'productDTO'フィールドの価値をどのように期待しているのかとは思いません。 JSPページに 'productAdminWebDTO.productDTO.productPrice'の値が表示されていますか? –

答えて

0

フォームのパスの値:inputは、オブジェクトに設定するプロパティにマップする必要があります。

パスはあなたがhttp://docs.spring.io/spring/docs/current/spring-framework-reference/html/view.html#view-jsp-formtaglib-formtag またはform bindingの簡単な説明でより多くの情報を見つけることができますpath="productDTO.productPartNumber"

のようなものでなければなりませんProductAdminWebDTO.ProductDTO.productPartNumberの入力タグの 。あなたのケースでは、表示するときと同じように、表示されるようなネストされたオブジェクトにアクセスする必要があります。

+0

ありがとうございますが、私はあなたの答えを理解できません。これはJSPページの表示に関係しているようです。 JSPページはうまく描画されます。 JSPページのフィールドには、すべてデータが入力されます。私はフォームの値をピックアップしようとしているときに、それはコントローラのサーバーに戻ってPOSTにあります。すべてのフィールドは "success" String以外のnullです。 –

+0

あなたが提案した内容は、Beanクラス[ProductAdminWebDTO]の 'productAdminWebDTO'プロパティが無効です: 'productAdminWebDTO'のBeanプロパティが読み込めないか、無効なgetterメソッドがあります:getterの戻り値の型がパラメータ型設定子と一致していますか? –

+0

productAdminWebDTOはフォームの要素にmodelAttributeとしてすでに設定されているので、pathの値には入れないようにしてください。私は適応する – Redlab

0

要約するとHttpMessageConverterは、HTTP要求メッセージを関連するJavaオブジェクトに変換します。私たちの場合、リクエストが行われたときにJSONをJavaオブジェクトに変換したいと考えています。 Springは変換を実行するためにMIMEタイプに関連付けられたHttpMessageConverterを具体的に探します。

プロジェクトにjackson依存関係を追加するだけでなく、春にメッセージコンバータとして登録する必要があります。

あまりにもこれを確認してください:Spring 3.0 making JSON response using jackson message converter

+0

私はcontent = "application/json"を見ませんでした。コントローラにjsonを受け入れるには、そこに定義する必要があります。 http://stackoverflow.com/questions/17835545/spring-mvc-not-able-to-submit-form-data-in-json-format – Redlab

+0

もう一度、私はそのフォームも確信していません:フォームはそれをサポートしていますか?それに続いて、ブラウザはアプリケーション/ jsonとしてフォームを送信することをサポートしていますか? http://stackoverflow.com/questions/38017123/is-form-enctype-appication-json-available – Redlab

+0

私はこれが赤ちゃんかもしれないと思います。私はどちらの方法でも動作するので、内容を明示的に設定することを忘れてしまいました。だから私はポストの質問からこれを削除しました。すべての場合、基本文字列は変換されますが、複雑な型はまだありません。 –

0

は、間違いを発見されました。それはJQueryの一部でした

 $('#viewForm input').attr("disabled", true); 
    $('#viewForm select').attr("disabled", true); 

私はフィールドを編集不可能にするためにJSPの別の場所で使っていました。私はフォームを再度有効にすることを忘れてしまった。それがなぜ正しく提出されなかったのかということだ。助けようとした人に感謝します。

+0

あなたがうまく働いてくれてうれしいです。より多くのコードを掲載した方が早く解決された可能性があり、ソリューションを間違った方向に検討することはありませんでした。 – Redlab

関連する問題