Don't use enum mappings. Just use enums as enums in Java and as strings in JSP/EL.
I'll assume that you need that integer because of a database mapping. E.g. Male
is stored as 1
in database and Female
is stored as 0
in database. In that case, you need to redesign your enum as follows:
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;
}
}
When populating the Person
from DB by JDBC, just do
person.setGender(Gender.valueOf(resultSet.getInt("gender")));
When showing preselected options to enduser in JSP, just do
request.setAttribute("genders", Gender.values());
and
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>
or even without the 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>
When collecting submitted values in servlet, just do
Gender gender = Gender.valueOf(Integer.valueOf(request.getParameter("gender")));
or when using without id
in HTML
Gender gender = Gender.valueOf(request.getParameter("gender"));