0

連絡先テーブルがあります。このテーブルには、名、姓、および複数の電話番号が含まれています。だから私のモデルは次のようなものです



    Contact {
    String firstName;
    String lastName;
    List phones;
    }

    Phone {
    String category; //home, work, mobile, etc
    String phoneNumber;
    }


したがって、Webページには、名と名前の2つの入力テキストと、電話の追加ボタンが含まれます。[追加]ボタンをクリックすると、カテゴリと電話番号の2つの入力テキストと、その行への削除ボタンが再度生成されます。

indexed = trueを使用してみましたが、次のようなhtmlが生成されます。

<input type="text" name="phone[0].category" ... />
<input type="text" name="phone[0].phoneNumber" ... />

問題は、JavaScriptの書き方がわからないことです。ユーザーが[追加]ボタンをクリックした場合の現在のインデックスがわからないため、ユーザーが[削除]ボタンをクリックしてから[追加]ボタンをクリックした場合、どのインデックスになるのでしょうか。インデックスがなくても大丈夫ですか?何かのようなもの

<input type="text" name="phone[0].category" ... />
<input type="text" name="phone[0].phoneNumber" ... />
<input type="text" name="phone[3].category" ... />
<input type="text" name="phone[3].phoneNumber" ... />

注:編集シナリオも考慮してください。

4

1 に答える 1

0

ここで最初に行うことは、インデックス付きのlogic:iterateタグを適切に使用してコードを生成することです。これについて疑問がある場合は、私が提供したこの回答を確認してください。これは、strutsでインデックス付き属性を使用する方法を詳細に説明しています:indexedおよびlogic:iterate

次に、ユーザーが行を追加または削除し、インデックスを正しく更新して、フォームを送信するときにStrutsがデータを取得できるようにするシナリオを検討する必要があります。私は一度この問題に遭遇しました、そして私がしたことは次のとおりでした:

  • 追加時:javascriptを使用して、テーブルの最後の行を見つけ、ページの生成されたコードを見て、空のコンテンツ、角括弧内のインデックスを含む新しいテーブル行を生成します。最後に、テーブルに追加します

    例:

    テーブル:

    <table><tr><td name='whatever[0].something'>asdf</td></tr>  
    <tr><td name='whatever[1].something'>asdf</td></tr>
    <tr><td name='whatever[2].something'>asdf</td></tr>
    </table>
    

    行を追加するには、次のようにjavascriptで行を作成します。

    var newRow = '<tr><td name='whatever[3].something'>asdf</td></tr>
    

    それをテーブルに追加します。

  • on del:上記と同じ手法を使用して、削除された行(または対応するインデックス)を見つけます。次に、残りの行のインデックスを編集して、後続の行の要素の順序と一致するようにします。

    例:

    テーブル:

    <table><tr><td name='whatever[0].something'>asdf0</td></tr>  
    <tr><td name='whatever[1].something'>asdf1</td></tr>
    <tr><td name='whatever[2].something'>asdf2</td></tr>
    </table>
    

    domからasdf1を削除して削除するとします。次に、新しいテーブルは次のようになります。

    <table><tr><td name='whatever[0].something'>asdf0</td></tr>  
    <tr><td name='whatever[2].something'>asdf2</td></tr>
    </table>
    

    次に、2番目のtdの名前を1のインデックスに変更することにより、正しい順序に一致するようにインデックスを更新する必要があります。これにより、テーブルはstrutsインデックス形式に戻ります。

    <table><tr><td name='whatever[0].something'>asdf0</td></tr>  
    <tr><td name='whatever[1].something'>asdf2</td></tr>
    </table>
    

  • 私はそれが十分に明確であることを望みます。いくつかの作業が必要なため、明らかにすべてのjs関数を作成することはできませんが、この情報を使用して、自分で作成することができます。

    于 2012-08-10T13:20:14.907 に答える