0

DynaForm を使用せずに、それはキンです。

Person などの POJO データ転送オブジェクトを使用したいと考えています。

public class Person {
   private Long id;
   private String firstName;
   private String lastName;
   // ... getters / setters for the fields
}

Struts ライブ アクション フォームでは、次のようになります。

public class PersonUpdateForm extends SLActionForm {
   String organization;
   Person[] persons; // all the people will be changed to this organization; they're names and so forth can be updated at the same time (stupid, but a client might desire this)

   // getters / setters + index setters / getters for persons

}

これを可能にするために、対応する html:text タグは JSP でどのように見えるでしょうか? List person フィールドに切り替えて遅延読み込みリスト (commons-collections 内) を使用すると、どのように変化しますか?

struts-1.2(.9?) でこれを行う良い方法はないようです。

すべてのヘルプは大歓迎です!!! さらにコンテキストが必要な場合はお知らせください。いくつか提供できます。

4

1 に答える 1

1

わかりました、私はそれを理解したと信じています!秘訣は、BeanUtils の populate メソッドによって getPersons() メソッドが呼び出されるたびに、インデックス付きゲッターに要素を作成させることです。コードはまだ完成していますが、良い結果が得られました。今は 3:30 です。誰も答えを知らないようで、トラウトで頭を叩きたくなった。私自身の無知については...私は彼らに責任があるだけです!

public List<Person> getPersons() {
   persons.add(new Person()); // BeanUtils needs to know the list is large enough
   return persons;
}

もちろん、インデックス付きのゲッターとセッターも追加してください。

私は実際にこれをどのように行ったかを覚えています。上記の人のリストを、転送する予定の最大サイズに事前に初期化する必要があります。これは、List が最初に配列に変換され、次に配列の各要素にプロパティが設定され、最後に setPersons(...) を使用して List が元に戻されるためです。したがって、遅延読み込みリストの実装または同様のアプローチ (上記のようなもの) を使用しても、struts live では機能しません。より詳細に行う必要があることは次のとおりです。

private List<Person> persons = new ArrayList<Person>(MAX_PEOPLE);
public MyConstructor() { for(int i = 0; i < MAX_PEOPLE; i++) persons.add(new Person()); }

public List<Person> getPeopleSubmitted() {
    List<Person> copy = new ArrayList<Person>();
    for(Person p : persons) {
        if(p.getId() != null) copy.add(p); 
        // id will be set for the submitted elements;
        // the others will have a null id
    }
    return copy; // only the submitted persons returned - not the blank templates
}

それは基本的にあなたがしなければならないことです!しかし、本当の問題は、Struts をライブで使用しているのは誰でしょうか?!

于 2009-04-27T07:33:45.033 に答える