使用枚举我想使用JSTL做一些网站开发和我碰上 以下问题:在JSTL
在这里,我想创建一个下拉列表,其中显示的数值是 的国名,并值是国家代码。要做到这一点我 在后端Java代码以下枚举:
public static enum CountryCodes implements EnumConstant {
USA, CAN, AUS, GBR, DEU, ESP, GUM, IND, ISR, MEX, NZL, PAN, PRI;
public final String toCountry(){
switch(this){
case USA:
return "United States";
case CAN:
return "Canada";
case AUS:
return "Australia";
case GBR:
return "Great Britan";
case DEU:
return "Germany";
case ESP:
return "Spain";
case GUM:
return "Guam";
case IND:
return "India";
case ISR:
return "Isreal";
case MEX:
return "Mexico";
case NZL:
return "New Zealand";
case PAN:
return "Panama";
case PRI:
return "Puerto Rico";
}
return this.toString();
}
}
,而JSP代码片段是这样的:
<c:set var="countryCodes" value="<%=RequestConstants.CountryCodes.values()%>" />
<td>
<select id="<%=RequestConstants.CLModifyPage.COUNTRY_CODE%>"
name="<%=RequestConstants.CLModifyPage.COUNTRY_CODE%>">
<c:forEach items="${countryCodes}" var="countryCode">
<c:choose>
<c:when
test="${sessionScope.CURRENT_INSTITUTION.countryCode == countryCode}">
<option value="${countryCode}" selected="selected">
${countryCode.toCountry()}</option>
</c:when>
<c:otherwise>
<option value="${countryCode}">${countryCode.toCountry()}
</option>
</c:otherwise>
</c:choose>
</c:forEach>
</select>
</td>
但上面的代码中有两个问题:
countryCode.toCountry()
实际上并不工作......我不确定它应该是什么语法。如果
"${sessionScope.CURRENT_INSTITUTION.countryCode}"
不是一个有效的枚举值,即如果它类似于“AAA”,那么比较失败并抛出java.lang.IllegalArgumentException:no enum const CountryCodes.AAA定义。我该如何解决这个问题?
非常感谢您!该解决方案确实解决了第一个问题。但是在比较期间,当institution.countryCode不是一个有效的枚举值时,它仍然会给出一个例外。 – Suli
它究竟能不能成为一个有效的枚举值?这是一个'国家代码',对吧?或者毕竟是一个'String'?相应地修复类型。否则使用枚举是完全没有意义的。 – BalusC
+1,因为自从几年前提出这个问题后,OP还没有在SO上,这应该被自动接受。只有次要的事情我会改变,而不是'$ {institution.countryCode == countryCode? 'selected':''}',我会替换' selected =“selected”'。 –