2012-06-20 28 views
11

Ví dụ:sử dụng giá trị của enum trong g: chọn khi enum là thuộc tính của đối tượng lựa chọn

batchTag là một loại thuộc tính liệt kê một batchRange, với các giá trị như sau:

JAN1 "January Biweekly 1", 
JAN2 "January Biweekly 2", 

v.v.

Tôi muốn hiển thị VALUE của thẻ lô hàng trong lựa chọn, IOW, lựa chọn phải chứa

"January Biweekly 1" 
"January Biweekly 2" ... 

không

JAN1 
JAN2 
FEB1 
FEB2 
FEB3 ... 

Tôi đã thử một vài điều trong g: chọn để làm điều này, nhưng không có bất kỳ thành công. Tôi nghĩ có lẽ "nó" sẽ có sẵn như là một phần của g: select (vì nó rõ ràng là một iteration) và cố gắng tham chiếu it.batchTag.name cho optionValue, nhưng điều đó không hoạt động. Bất kỳ đề xuất?

Cảm ơn bạn!

Trả lời

20
enum BatchRange { 
    JAN1 "January Biweekly 1", 
    JAN2 "January Biweekly 2", 

    final String value 

    BatchRange(String value) { this.value = value } 

    String toString() { value } 
    String getKey() { name() } 
} 

Lưu ý phương thức getKey(). Và sau đó g của bạn: chọn

<g:select name="batch" from="${BatchRange.values()}" optionKey="key" /> 

hoặc

<g:select name="batch" from="${BatchRange.values()}" keys="${BatchRange.values()*.name()}" /> 
+1

Cảm ơn bạn! Đề nghị thứ hai là những gì tôi tìm kiếm. – Alexx

+0

Hoàn hảo! Cảm ơn –

+0

Giải pháp thẻ đầu tiên có thể được đơn giản hóa thành ''. Sau đó, bạn không cần phương thức BatchRange toString- hoặc getKey. – Wonko

0

Một cách tiếp cận tốt hơn là nên sử dụng tin nhắn i18n trong trường hợp này. Có hai tùy chọn:

  1. Thêm giá trịMessagePrefix để chọn.
  2. Làm cho enum thực hiện org.springframework.context.MessageSourceResolvable như được mô tả trong this blog post.

Xem this question để biết thêm thông tin.