2012-06-30 91 views
0

我有一個這樣的枚舉:整數枚舉和g:選擇

public enum MyEnum { 
    Apple (1) 
    Microsoft (2) 
    IBM (4) 
    Intel (8) 

    int company 

    MyEnum(int company) { 
    this.company = company 
    } 
} 

而且我想AG:選擇框看起來像這樣(的整數值都在value屬性很重要):

<select> 
    <option value="1">Apple</option> 
    <option value="2">Microsoft</option> 
    <option value="4">IBM</option> 
    <option value="8">Intel</option> 
</select> 

確定這就是使用G沒問題:選擇:

<g:select name="myenum" from="${MyEnum?.values()*.company}" /> 

但是當我嘗試保存表單我總是得到: java.lang.IllegalStateException:無法將屬性myenum的[java.lang.String]類型的值轉換爲所需的類型[MyEnum]:找不到匹配的編輯器或找到的轉換策略

如何解決此問題?

回答

0

現在我用用INLIST一個簡單的整數限制,而不是枚舉修改標籤。它不一樣,但解決了我的問題。

class MyDomain { 
    int company 
    static constraints = { 
     company(inList: [1, 2, 4, 8]) 
    } 
} 

形式:克:從= 「$ {} MyDomain.constraints.company.inList」 價值選擇valueMessagePrefix = 「公司」 名稱= 「公司」=「$ {?myDomainInstance。公司} 「/>

現在我需要使用對於i18n文件(messages.properties):

company.1=Apple 
company.2=Microsoft 
company.4=IBM 
company.8=Intel 
2

嘗試:

public enum MyEnum { 
    Apple (1) 
    Microsoft (2) 
    IBM (4) 
    Intel (8) 

    int company 

    MyEnum(int company) { 
    this.company = company 
    } 

    String toString() { return company } 
    String getKey() { name() } 
} 

,然後用

<g:select name="myenum" from="${MyEnum?.values()*.company}" optionKey="key" /> 
+0

現在,我得到一個MissingPropertyException:消息:沒有這樣的屬性:鍵類:java.lang.Integer中 – Mewel

+0

因爲你將屬性傳遞給標籤,你可以通過'Enum'我nstance本身,'MyEnum?.values()'而不關心'.company' – Jack

+0

就像在圈子裏走動一樣。當我不使用.company時,我的選項元素看起來像。我不想要那個:/。 – Mewel