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...
}

我想创建:

  • PhonewithmobilePhonemobilePhone_pform 参数的一个实例。
  • PhonewithpersonalPhonepersonalPhone_pform 参数的一个实例。
  • PhonewithworkPhoneworkPhone_pform 参数的一个实例。

每个实例都应添加到PhoneForm's 列表中。

怎么做 ?

@Valid PhoneForm phoneForm我做这个表单结构是为了允许在我的 Spring MVC 控制器中只使用一个注释来验证我的 bean:我正在使用列表,因为我想验证用户设置的至少一部电话。

4

1 回答 1

2

这可能不是最好的技术,但这是我将如何为您的问题实施解决方案。

  1. 为 PhoneForm 中的每个电话字段创建一个字段。如果没有别的原因,这将有助于在您的页面上设置值。

  2. 在PhoneForm 类中创建一个方法(可能称为getMobilePhoneList()),该方法为移动电话创建一个Phone 对象列表。

  3. 在PhoneForm 类中创建一个方法,为个人电话创建一个Phone 对象列表。

  4. 在PhoneForm 类中创建一个方法,为工作电话创建一个Phone 对象列表。

  5. 使用 PhoneForm getter 在页面上和验证期间填充字段。

  6. 需要时使用 java 中的 getxxxPhoneList() 方法。

于 2013-08-26T16:50:02.543 回答