spring webflow 2 binding:如何使用枚举值填充<select> </select>

时间:2012-05-25 08:46:13

标签: jsp select binding enums spring-webflow-2

我正在使用spring webflow 2,我正面临着为用户注册提交表单的问题。用户必须插入姓名,姓氏和他/她的国籍。这是模型类:

    @Component
    @Entity
    @Table (name = "personal_data")
    public class PersonalData implements Serializable {

@Id @GeneratedValue
@Column (name = "id")
private Integer id;

@Column (name = "name", nullable=false)
private String name;

@Column (name = "familyName", nullable=false)
private String familyName;

@Column (name = "nationality")
@Enumerated (EnumType.STRING)
private Nationality nationality;

    //getters and setters
    }

国籍是:

public enum Nationality {
    Afghan, Albanian , Algerian , American , Andorran , Angolan , Antiguans , Argentinean , Armenian ...
}

我可以使用spring webflow绑定所有内容,并且表单正确显示。但我无法填写标签

jsp是:

<tr>
            <td><spring:message code="label.familyName"/>:</td>
            <td><form:input path="personalData.familyName" /> <form:errors path="personalData.familyName"/> </td>
        </tr>

            <td><spring:message code="label.name"/>:</td>
            <td><form:input path="personalData.name" /> <form:errors path="personalData.name"/> </td>
        </tr>

            <td><spring:message code="label.nationality"/>:</td>
            <td><form:select path="personalData.nationality"/> <form:errors path="personalData.nationality"/>

                </td>
        </tr>   

弹簧webflow定义为:

    <var name="profile" class="com.tclouds.tpaas.models.user.UserProfile"/>

    <view-state id="registerProfile" view="profile/create1" model="profile">
        <transition on="submitRegistration" to="confirmData"/>
    </view-state>

你能告诉我怎样才能填充

非常感谢

1 个答案:

答案 0 :(得分:4)

<form:options />标记中的

“items”属性显示以下文档:

  

用于生成内部的Collection,Map或对象数组   '选项'标签。除非包含,否则此属性是必需的   select的数据绑定属性是一个Enum,在这种情况下是   使用枚举值。

因此,您只需在select中添加<form:options />标记而不添加任何属性。这将使select作为文本和值填充枚举项。您还可以添加默认的“选择”选项。例如:

<form:select path="personalData.nationality">
    <option value="">Choose a nationality</option>
    <form:options />
</form:select>

该代码将生成以下html输出:

<select name="personalData.nationality">
    <option value="">Choose a nationality</option>
    <option value="Afghan">Afghan</option>
    <option value="Albanian">Albanian</option>
    <option value="Algerian">Algerian</option>
    <option value="American">American</option>
    <option value="Andorran">Andorran</option>
    <option value="Angolan">Angolan</option>
    <option value="Antiguans">Antiguans</option>
    <option value="Argentinean">Argentinean</option>
    <option value="Armenian">Armenian</option>
</select>

希望这有帮助。