2015-11-01 2 views

ответ

0

я нашел workaround, я думаю, что это может помочь ..

1. ToString()

Как вы знаете, экранные экраны просто выводят значения в выделениях и выпадающих списках через метод toString() показанного объекта. Мы можем построить каждое перечисление с помощью жесткого кодирования и иметь toString() вернуть это значение.

class Product { 

enum Status { 

    AVAILABLE("Beschikbaar"), SOLD_OUT("Uitverkocht") 

    final String value 
    Status(String value) { 
     this.value = value 
    } 

    String toString() { 
     value 
    } 
} 

String name 
Status status 

static constraints = { name blank: false, unique: true } 
} 

Фактические имена перечисления теперь только появляются в генерируемый HTML:

<select name="status" required="" id="status" > 
<option value="AVAILABLE" >Beschikbaar</option> 
    <option value="SOLD_OUT" >Uitverkocht</option> 
    </select> 

2. MessageSourceResolvable

К настоящему моменту вы, вероятно, понимают, над жестко запрограммированным решением работает только один язык, один жестко закодирован в перечислении его elf - это вызовет проблемы, когда через месяц ваше приложение должно будет поддерживать второй язык :-) Итак, как мы используем тот факт, что у нас уже есть message_XX.properties, где мы поместили наши другие ключи сообщений? Используйте базовую структуру Spring. Попросите наш enum реализовать org.springframework.context.MessageSourceResolvable, например. как это:

enum Status implements org.springframework.context.MessageSourceResolvable { 

AVAILABLE, SOLD_OUT 

public Object[] getArguments() { [] as Object[] } 

public String[] getCodes() { [ name() ] } 

public String getDefaultMessage() { "?-" + name() } 
} 

Теперь мы можем обеспечить значение в наших messages_nl.properties для каждого перечисления мы имеем:

product.label=Product 
product.name.label=Naam 
product.status.label=Status 
AVAILABLE=Beschikbaar 
SOLD_OUT=Uitverkocht 
Смежные вопросы