0

country_list と rating_list の 2 つのテーブルがあります。システムに新しい国を追加するための別の jsp があります。問題は、国のすべての評価を編集できる [評価の編集] ページにあります。[評価の編集] ページを開くと、すべての国名がラベルとして 1 つずつ表示され、対応するテキスト フィールドが表示され、ユーザーが付けたい評価を与えることができます。ユーザーが評価の編集ページで [送信] をクリックしたときに、評価の値をフォームの値にどのようにマッピングできますか? 国名リストはデータベースから入力できますが、評価はどうでしょうか? 国の数が確かな場合は、フォーム クラスにその数の評価フィールドを指定できます。しかし、テキスト フィールドがいくつ表示されるかはわかりません。私はストラット1.2を使用しています。良い習慣ではありませんが、フォームに空の値を持つ文字列を 100 個ほど作成する必要がありますか。

たとえば、ログイン ページの場合、「String username;String password」のような 2 つのフィールドと、対応するセッターとゲッターを作成できます。

しかし、私の問題では、いくつの国と対応する評価がわかりません。そのため、国名をリストとして指定し、国名をリストとして指定すると、フォームを送信する際に国名と評価が対応するリストに自動的にマッピングされるかどうかわかりません。

4

3 に答える 3

1

次の手法が役立つ場合があります。フォーム クラスに、次のようなゲッターとセッターを追加します。

public void setRating(String a_CountryId, String a_sRating)
{
    // Store the rating for the given country id, e.g. in a map
}

public String getRating(String a_sCountryId)
{
   // Return the rating for the given country id, e.g. from a pre-populated map
}

その後、JSP ページで次の構文を使用してこれらにアクセスできます。

property="rating(${country.id})"

たとえば、JSP ページで国を反復処理し、html:input タグを使用して上記の getter に関連付けます。たとえば、次のようになります。

<logic:iterate name="countryList" id="country">
    <bean:write name="country" property="name"/>
    Rating:
    <html:text name="form" property="rating(${country.id})"/>
</logic:iterate>
于 2012-05-02T20:10:39.200 に答える
0

いいえ、何百もの文字列を作成する必要はありません。

次のようなオブジェクトのリストがあるとします

List<Country> countryList;// This list is getting populated say from database

jsp コードは次のようになります。

<logic:iterate name="countryList" id="countryListId">
  <label><bean:write name="countryListId" property="countryName"/></label>
</logic:iterate>

コメントによると:

国を考慮すると、次のようになります。

public class Country {

  private String countryName;

  private List<Rating> ratingList;

}

最小限の HTML は次のようになります。

<table>
    <logic:iterate name="countryList" id="countryListId">
      <tr>
          <td>
              <label><bean:write name="countryListId" property="countryName"/></label>
          </td>
          <logic:iterate id="ratingListId" name="rating" property="ratingList">
              <td>
                  <input type="text"><bean:write name="ratingListId" property="ratingName"/></input>
               </td>
          </logic:iterate>
      </tr>
    </logic:iterate>
</table
于 2012-05-02T07:25:18.297 に答える
0

logic タグ、特に logic:iterate を使用します。これがどのように機能するかへのリンクです:

Struts ロジック:反復

于 2012-05-02T07:20:11.103 に答える