2011-07-19 8 views
3

で列挙型の値と比較:は、私は私のバックエンドのJavaコードでfollwoing列挙型を持つJSTL

public static enum CountryCodes implements EnumConstant { 
        USA, CAN, AUS;} 

とJSPで、私は列挙型の値を反復処理との比較を行うにしようとしています:

<c:set var="countryCodes" value="<%=RequestConstants.CountryCodes.values()%>" /> 
<td><select> 
    <c:forEach items="${countryCodes}" var="countryCode"> 
     <c:choose> 
     <c:when test="${CURRENT_INSTITUTION.countryCode == countryCode}"> 
      <option value="${countryCode}" selected="selected">${countryCode}</option> 
     </c:when> 
     <c:otherwise> 
      <option value="${countryCode}">${countryCode}</option> 
     </c:otherwise> 
     </c:choose> 
    </c:forEach> 
</select></td> 

しかし、問題は、CURRENT_INSTITUTION.countryCodeがデータベースから読み込まれ、enum値の1つではない可能性があることです。

CURRENT_INSTITUTION.countryCode

がenum値以外の値、(CHN言う)である場合、比較は、以下の例外をスロー:

java.lang.IllegalArgumentExceptionが:CountryCodes.CHNが定義されていない列挙CONST。

データベースには正常性チェックされていない無効な値が含まれている古いデータが格納されているため、この状況に対処する必要があります。

したがって、CURRENT_INSTITUTION.countryCodeが列挙型の値ではない場合、比較のための方法はfalseを返しますか?または、CURRENT_INSTITUION.countryCodeがenum値の1つであるかどうかを判断する方法があるので、それに基づいて適切な処置を取ることができますか?そして、あなたは文字列を比較することができます

public String getName() { 
    return name(); 
} 

+0

'EnumConstant'は何を使用することができますか? – skaffman

答えて

12

は名前を返す列挙型でゲッターを定義します。

あなたのELバージョンは、メソッド呼び出しをサポートしている場合は、ゲッターをスキップしてcountryCode.name()

+0

ありがとうございます。それはうまくいった! – yangsuli

関連する問題