不要使用枚举映射。只需将枚举用作 Java 中的枚举和 JSP/EL 中的字符串。
我假设您因为数据库映射而需要该整数。例如。 Male 在数据库中存储为1,Female 在数据库中存储为0。在这种情况下,您需要重新设计您的枚举,如下所示:
public enum Gender {
Male(1), Female(0);
private int id;
private Gender(int id) {
this.id = id;
}
public int getId() {
return id;
}
public static Gender valueOf(int id) {
for (Gender gender : values()) {
if (gender.id == id) {
return gender;
}
}
return null;
}
}
当通过 JDBC 从 DB 中填充 Person 时,只需这样做
person.setGender(Gender.valueOf(resultSet.getInt("gender")));
在 JSP 中向最终用户显示预选选项时,只需这样做
request.setAttribute("genders", Gender.values());
和
Gender:<br/>
<c:forEach items="${genders}" var="gender">
<input type="radio" id="gender_${gender.id}" name="gender" value="${gender.id}"
${gender == person.gender ? 'checked="checked"' : ''} />
<label for="gender_${gender.id}">${gender}</label>
<br />
</c:forEach>
甚至没有id
Gender:<br/>
<c:forEach items="${genders}" var="gender">
<input type="radio" id="gender_${gender}" name="gender" value="${gender}"
${gender == person.gender ? 'checked="checked"' : ''} />
<label for="gender_${gender}">${gender}</label>
<br />
</c:forEach>
在 servlet 中收集提交的值时,只需这样做
Gender gender = Gender.valueOf(Integer.valueOf(request.getParameter("gender")));
或者在 HTML 中不使用 id 时
Gender gender = Gender.valueOf(request.getParameter("gender"));