2009-12-28 23 views
8

Tôi đã cố khi sử dụng liệt kê trong Grails: tôi cố gắng sử dụng một enumeraion trong một đối tượng grails miềnGrails GORM & Enums

mã:

package it.xxx.tools.kanban 

    import java.util.Date; 

    class Task { 

     String name 
     String description 

     Priority priority 

static belongsTo = [user:User, project:Project] 

     static constraints = { 
      name(nullable:false, maxSize:25) 
      description(nullable:false, maxSize:1500) 
      priority(nullable:true) 
     } 
    } 

package it.xxx.tools.kanban; 

public enum Priority { 

VERY_LOW("Very Low"), 
LOW("Low"), 
MEDIUM("Medium"), 
HIGH("High"), 
VERY_HIGH("Very High") 

private final String value 

Priority(String value){ 
    this.value = value; 
} 

String toString() { 
    value 
} 

String getKey() { 
    name() 
} 

static list(){ 
    [VERY_LOW, LOW, MEDIUM, HIGH, VERY_HIGH] 
} 
} 

<tr class="prop"> 
    <td valign="top" class="name"> 
    <label for="priority">Priority:</label> 
    </td> 
    <td valign="top" class="value       ${hasErrors(bean:taskInstance,field:'priority','errors')}"> 
    <g:select from="${it.weservice.tools.kanban.Priority?.values()}" value="${taskInstance?.priority}" name="priority" noSelection="['':'']"></g:select> 
    </td> 
</tr> 

tôi sử dụng grails generate-tất cả các lệnh

Khi tôi cố gắng tiết kiệm thông qua ứng dụng web đối tượng nhiệm vụ tôi có lỗi sau:

Failed to convert property value of type [java.lang.String] to required type [it.weservice.tools.kanban.Priority] for property priority; nested exception is java.lang.IllegalArgumentException: Cannot convert value of type [java.lang.String] to required type [it.weservice.tools.kanban.Priority] for property priority: no matching editors or conversion strategy found 
+0

Bạn đang sử dụng phiên bản Grails nào? –

+0

Tôi đang sử dụng grails 1.1.1 – pbanfi

Trả lời

6

tôi trả lời câu hỏi của riêng tôi, vì người dùng khác có thể tìm thấy nó hữu ích: i kiểm tra grails lời khuyên về enums here (cuối trang) Thực hiện của tôi, tôi quên optionKey = "chìa khóa" trong g: chọn thẻ

Thêm tất cả mọi thứ đã được hun khói một cách trơn tru

2

Bạn cần thay đổi dạng xem, ví dụ: thêm optionValue="value" vào lựa chọn trong tệp create.gsp.

Bạn không cần phải:

String toString() { 
    value 
} 

String getKey() { 
    name() 
} 

Yo cần phải có một getValue(), vì vậy thay đổi private final String value để final String value.

Thông tin thêm (ở Tây Ban Nha): http://thewhitehatsolution.wordpress.com/

+0

Tôi rất tiếc nhưng tôi không thể truy cập liên kết bạn đã cung cấp từ nơi làm việc Tôi đã giải quyết được vấn đề của mình sau: http: //www.grails. org/TipsAndTricks Tôi đã quên optionKey = "key" trong thẻ g: select – pbanfi

2

Nếu bạn đang sử dụng giàn giáo = true trong điều khiển của bạn, sau đó bạn cũng có thể thay đổi mẫu mà tạo ra các thẻ chọn trong quan điểm bằng cách chỉnh sửa tập tin renderEditor.template . Để làm điều này:

  1. grails install-templates

  2. Chỉnh sửa các tập tin src/templates/giàn giáo/renderEditor.template
  3. Chỉnh sửa phương pháp renderEnumEditor (...) và thêm vào optionKey = \ "chốt \" vào chọn tùy chọn của thẻ.