0

Spring MVC 3.1 を使用してフォーム内のオブジェクトのリストに一連のフィールドをバインドし、Bean Validation を使用して検証しようとしています。

しかし、複数のフィールドを単一のオブジェクトとこれらのオブジェクトのリストにバインドする方法がわかりません。

HTML フォーム:

<form method="post" action="#" id="phoneForm">
    <table>
        <tr>
            <td><label for="mobilePhone">Mobile</label></td>
            <td>
                <input type="text" class="mp_phone" name="mobilePhone" id="mobilePhone" value="" />
            </td>
            <td><label for="mobilePhone_p">Preferred phone number</label> <input type="radio" name="num_p" id="mobilePhone_p" value="mobilePhone_p" /></td>
        </tr>
        <tr>
            <td><label for="personalPhone">Personal</label></td>
            <td>
                <input type="text" class="mp_phone" name="personalPhone" id="personalPhone" value="" />
            </td>
            <td><label for="personalPhone_p">Preferred phone number</label> <input type="radio" name="num_p" id="personalPhone_p" value="personalPhone_p" /></td>
        </tr>
        <tr>
            <td><label for="workPhone">Work</label></td>
            <td>
                <input type="text" class="mp_phone" name="workPhone" id="workPhone" value="" />
            </td>
            <td><label for="workPhone_p">Preferred phone number</label> <input type="radio" name="num_p" id="workPhone_p" value="workPhone_p" /></td>
        </tr>
    </table>
    <button type="submit" id="validateFormButton">Submit</button>
</form>

私のフォーム:

public class PhoneForm {    
    @NotEmpty
    @Valid
    private List<Phone> phonesList = new LinkedList<Phone>();

    // getter/setter...
}

電話クラス:

public class Phone {        
    @PhoneNumber
    protected String phoneNumber;

    @NotNull
    protected Boolean prefferedNumber;

    // getter/setter...
}

作成したい:

  • PhonewithmobilePhoneおよびmobilePhone_pform パラメータのインスタンス。
  • PhonewithpersonalPhoneおよびpersonalPhone_pform パラメータのインスタンス。
  • PhonewithworkPhoneおよびworkPhone_pform パラメータのインスタンス。

このインスタンスのそれぞれをPhoneFormのリストに追加する必要があります。

どうやってするか ?

@Valid PhoneForm phoneFormこのフォーム構造を使用して、Spring MVC コントローラーで注釈だけで Bean を検証できるようにします。ユーザーが設定した少なくとも 1 つの電話を検証したいので、リストを使用しています。

4

1 に答える 1

2

これはこれに最適な手法ではないかもしれませんが、あなたの質問に対する解決策を実装する方法は次のとおりです。

  1. PhoneForm の電話フィールドごとにフィールドを作成します。これは、他に何もない場合でも、ページに値を設定するのに役立ちます。

  2. PhoneForm クラスで、携帯電話の Phone オブジェクトのリストを作成するメソッド (おそらく getMobilePhoneList() と呼ばれる) を作成します。

  3. 個人の電話の Phone オブジェクトのリストを作成する PhoneForm クラスのメソッドを作成します。

  4. 勤務先電話の Phone オブジェクトのリストを作成する PhoneForm クラスのメソッドを作成します。

  5. PhoneForm ゲッターを使用して、ページ上および検証中にフィールドにデータを入力します。

  6. 必要な場合は、Java の getxxxPhoneList() メソッドを使用してください。

于 2013-08-26T16:50:02.543 に答える