2012-05-14 19 views
1

誰かがSpring MVCのフォームにCollectionをバインドしようとする試みが機能していない理由を知ってもらえますか?ここでフォームへのバインドコレクション - なぜ機能しないのですか?

は私のオブジェクトがどのように見えるかである - ここで

public class TestObj { 
    private Integer testNumber; 
    private String home; 
    private String destination; 
} 

は、上記課題のリストが含まれて私のフォームオブジェクトである - 私のコントローラで

public class TestForm { 
    private List<TestObj> testList; 
    //contains getter and setter for testList 
} 

、私はformBackingObjectメソッドを実装している -

public class MyController extends SimpleFormController { 

    public MyController() { 
     setCommandClass(TestForm.class); 
     setCommandName("testForm"); 
    } 

     protected Object formBackingObject(HttpServletRequest request) throws Exception { 
      if (isFormSubmission(request)) { 
       testForm = (TestForm) super.formBackingObject(request); 
       //THIS ALWAYS RETURNS NULL ON FORM SUBMISSION 
       List<TestObj> testList = testForm.getTestList(); 
      } else { 
       //load initial data using hibernate. TestObj is hibernate domain object. 
       List<TestObj> testList = myService.findTestList(); 
       testForm = new TestForm(testList); 
      } 
      return testForm; 
     } 

ここに私のJSPスニペットがあります -

最初にデータをロードしてもフォームに問題がないうちに、送信ボタンを押すとコントロールはformBackingObjectメソッドに進み、isFormSubmissionはtrueを返します。しかし、super.formBackingObject(request)を使ってコマンドオブジェクトを取得すると、testList値をnullとしてフォームオブジェクトが返されます。この単純なケースがなぜ機能していないのか理解できません。

私は本当にこれを動作させるための助けに感謝します。

答えて

0

私はformBackingObjectメソッドの私の理解が間違っていなければならないと思います。実装からそのメソッドを削除し、初期フォームのloadにreferenceDataを使用し、submitでonSubmitを処理しました。これは正常に動作し、期待どおりにフォームのコレクションを取得します。

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

0

あなたはSpring 3を使用していますか?その場合は、this postをご覧ください。

リスト処理とオブジェクトバインディングに関しては、this postを参照してください。

+0

返信いただきありがとうございます。私はSpring 2.0を使用しているアプリケーションを引き継いだが、まだSpring 3.0以上の機能を使用する立場には達していない。また、バインディングに関して投稿した2番目のリンクを見て、そこに記載されている別のリンクからAutoPopulatingListの使用方法を見つけました。しかし、それは私がすべてのヌルでリストを返すので、まだ助けにならない。 – JUG

+0

私の経験は春3だけです。私はさらに助けることができるかどうかを確認するために少し掘り下げますが、他の誰かがあなたのために早く返信したらうれしいです! :) – skel625

0

次のコードを試してみてください。あなたの問題を解決できるかもしれません。

private List<TestObj> operationParameterses = LazyList.decorate(new ArrayList<TestObj>(), FactoryUtils.instantiateFactory(TestObj.class)); 

すべてのヌルリストは返されません。

希望はあなたを助けます。

乾杯。

+0

これを実現するには、あなたはまた、コモンズコレクション**ライブラリが必要です。 –

+0

ありがとうございます。私はそれを試してみるつもりです。上記のコードでtestListを初期化するために私のコードでTestFormに入れることを提案していますか? – JUG

+0

これはまだ動作しませんでした。私はフォーム上の項目がマップされていない理由を理解していません。 TestFormというフォームはnullに戻りませんが、List insideは常にsubmit時にnullになります。私は提出時にsetterがJSPからフォームへの要素を設定していないと疑っています。私はなぜこれをやっていないのか、これについての考えがなくなっています。 – JUG

関連する問題