2011-08-07 60 views
4

我有類似以下各項玩!框架ENUM和Groovy問題

Woman.java

... 
@Entity 
public class Woman extends Model { 

    public static enum Outcome { 
     ALIVE, DEAD, STILL_BIRTH, LIVE_BIRTH, REGISTER 
    } 
    ... 
} 

File.java

... 
@Entity 
public class Form extends Model { 
    ... 
    public Outcome autoCreateEvent; 
    ... 
} 

create.html上

#{select "autoCreateEvent", items:models.Woman.Outcome.values(), id:'autoCreateEvent' /} 

它將ENUM值保存在DB中,這是OK的。但是,當我重新加載/編輯時,問題就會上升。因爲它使用ALIVE,DEAD等作爲選項的值,所以無法正確顯示列表。

Any Insight?

回答

3

如果我正確理解您的問題,您想使用valuePropertylabelPropertyoption中設置合適的值。

#{select "autoCreateEvent", items:models.Woman.Outcome.values(), valueProperty:'ordinal', labelProperty: 'name', id:'autoCreateEvent' /} 

編輯:喜歡的東西

對於這個工作,你將需要調整枚舉了一下,像這樣:

public enum Outcome { 
    A,B; 

    public int getOrdinal() { 
    return ordinal(); 
    } 

} 

的原因是,播放#{選擇}預期獲取者在valuePropertylabelProperty params中,並且當找不到默認值時enum toString

+0

您好,感謝您的回覆,我想它應該工作,但事實並非如此。你可以去這個鏈接並搜索'valueProperty',他們評論過這個部分 - http://svn.codehaus.org/grails-plugins/grails-filterpane/tags/RELEASE_0_7/grails-app/taglib/com/ zeddware/grails/plugins/filterpane/FilterTagLib.groovy – Rifat

+0

@rifat你給了grails的鏈接,不玩框架......你得到了什麼錯誤? –

+0

沒有錯誤!但它給出錯誤的輸出 <期權價值= 「ALIVE」> ALIVE 而我預計 <期權價值= 「0」> ALIVE – Rifat

1

要添加到以前的答案,將其添加到您的Enum decl aration:

public String getLabel() { 
    return play.i18n.Messages.get(name()); 
} 

確保使用瞭如下聲明:

#{select "[field]", items:models.[Enum].values(), valueProperty:'name', labelProperty: 'label' /} 

您也可以在枚舉補充一點:

@Override 
public String toString() { 
    return getLabel(); 
} 

,如果你想顯示這將是有益的國際化的價值在您的視圖文件(因爲toString被顯示時自動調用),但函數name()使用toString(),所以你將不得不綁定valueProperty到另一個函數,如下所示:

public String getLabel(){ 
    return toString(); 
} 

public String getKey() { 
    return super.toString(); 
} 

@Override 
public String toString() { 
    return Messages.get(name()); 
} 

而且#選擇使用:

#{select "[field]", items:models.[Enum].values(), value:flash.[field], valueProperty:'key', labelProperty: 'label' /}