2011-11-10 1 views
2

私はJava Spring Frameworkを初めて使用しています。新しいプロジェクトには要件があります。Javaスプリングフレームワークを使用してWebフォームから複数の行をデータベースに挿入する方法

私はSpringフレームワークを使用して、setメソッドとgetメソッドを持つPOJOクラスを持っています。 私は中間のJavaサービスとWebクラスも持っています。私は<form>タグを使用してjspからbeanクラスにマップし、単一のオブジェクトですべてのアクションを実行することができました。

しかし、私の問題は、私がどのように複数のオブジェクト(レコード)に対して同じ作業を行うことができるかということです。

単純な言葉で: jspページの入力データを使用して、データベーステーブルに7つの行(レコード)を一度に挿入します。私のJSPページから入力パラメータを受け入れ、7行に対応する7つのオブジェクトを作成し、それを送信ボタンのクリックに挿入するにはどうすればよいですか?

これに関するいくつかのガイダンスを提供してください。

+0

使用インデックス付きプロパティ:データ[0] .nameの、例えば。 http://stackoverflow.com/questions/1429760/command-objects-in-spring –

答えて

8

私は、別のPOJOをあなたのPOJOのリストが入ったコンテナとして扱うことで、これを達成しました。

これは、次のようになります。

public class PojoForm { 
    private List<Pojo> pojos; 
    public List<Pojo> getPojos() { 
     return pojos; 
    } 
    public void setPojos(List<Pojo> pojos) { 
     this.pojos = pojos; 
    } 
} 

次にコントローラで、モデルの属性として、このコンテナの代わりに、実際のP​​OJOを使用しています。

<form:form commandName="pojoForm" method="POST"> 
    <!-- Pojo 1 --> 
    <form:input path="pojos[0].a" /> 
    <form:input path="pojos[0].b" /> 
    <form:input path="pojos[0].c" /> 
    <!-- Pojo 2 --> 
    <form:input path="pojos[1].a" /> 
    <form:input path="pojos[1].b" /> 
    <form:input path="pojos[1].c" /> 
</form:form> 

a、b、cはPOJOクラスのプロパティであること:

@ModelAttribute("pojoForm") 
public PojoForm populatePojos() { 
    // Don't forget to initialize the pojos list or else it won't work 
    PojoForm pojoForm = new PojoForm(); 
    List<Pojo> pojos = new ArrayList<Pojo>(); 
    for(int i=0; i<2; i++) { 
     pojos.add(new Pojo()); 
    } 
    pojoForm.setPojos(pojos); 
    return pojoForm; 
} 

@RequestMapping(method=RequestMethod.POST) 
public String saveForm(@ModelAttribute("pojoForm") PojoForm pojoForm) { 
    for(Pojo pojo : pojoForm.getPojos()) { 
     service.save(pojo); 
    } 
    return "theview.jsp"; 
} 

次にビューには、次のようになります。

することもでき、このようなリストに直接ループ:

<form:form commandName="pojoForm" method="POST"> 
    <c:forEach items="${pojoForm.pojos}" varStatus="i"> 
     <form:input path="pojos[${i.index}].a" /> 
     <form:input path="pojos[${i.index}].b" /> 
     <form:input path="pojos[${i.index}].c" /> 
    </c:forEach> 
</form:form> 
+0

こんにちはフェリックスあなたの応答に感謝します。私はこの基準を私の心に持っていますが、何百ものJSPページがありますので、そのようなオブジェクトを表形式で100個表示しなければならないので、POJOのすべてにユニークなコンテナを作成する必要があります大丈夫です。私は何かがある場合、これにいくつかの一般的な方法を探しています。そのような簡単な方法でこの解決策を説明していただきありがとうございます:) – JBT

+0

あなたは大歓迎です。これにPojoFormクラスを一般的なPojoForm とすることでいくつかの一般性を追加することができます。 –

+0

もう一度私はそれが私の心の中に来ていないのか分からない。私はコードを変更しようとしましたが、リストの代わりにリストを使用しましたが、現在アプリケーションがそれを投げていません。不明なソース) \t at java.util.ArrayList.get(不明なソース) 例外。正確に何が問題なのか理解していないビューパートでも、異なるPOJO(POJO1とPOJO2の場合は...上記のように)POJOがリストにあるJSP回数をループする方法はありますか? – JBT

関連する問題