使用枚舉我想使用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」'。 –