2012-07-26 35 views
6

Tôi có combobox sau:Grails g: chọn không có lựa chọn

<g:select name="ticketType" from="${app.domain.enums.TicketType?.values()}" 
           keys="${app.domain.enums.TicketType.values() }" 
           value="${ticketInstance?.ticketType}" 
           noSelection="${['null': 'Select One...']}" 
        /> 

tôi đã thiết lập các hạn chế sau đây cho ticketType trong đối tượng lệnh

ticketType nullable: true, blank:true 

TicketType là một enum rất đơn giản:

public enum TicketType { 
     QUESTION, SUPPORT, MAINTENANCE, NEW_FUNCTIONALITY, MALFUNCTION 
} 

Và mỗi khi tôi không thiết lập một số giá trị cho ticketType trong GSP của tôi, tôi nhận được lỗi sau:

Failed to convert property value of type 'java.lang.String' to required type 'com.coming.enums.TicketPriority' 

Giống như trường hợp không có lựa chọn g: chọn đặt giá trị cho "null" (chuỗi).

Tôi đang thiếu gì?

+0

Vui lòng hiển thị mã của 'g: select' ... – aiolos

+0

@aiolos Xin lỗi - đã xảy ra lỗi khi định dạng. Tôi đã chỉnh sửa bài đăng của mình. – drago

Trả lời

14

Thay vì sử dụng các 'null' theo nghĩa đen, có bạn đã cố gắng sử dụng một chuỗi rỗng như của bạn Thuộc tính noSelection? ví dụ. noSelection="${['':'Select One...']}"? Điều này có thể làm một chuyển đổi thích hợp thành một giá trị null đúng trong quá trình ràng buộc dữ liệu.

+0

Đó là cách tôi thường làm nhưng nó không hoạt động. Vì vậy, tôi đã chơi với các tùy chọn khác nhau. Trong thời gian đó, tôi đã thay đổi một số mã trong bộ điều khiển và dịch vụ, và trả lại noSelection thành noSelection = "$ {['': 'Chọn một ...']}" và bây giờ nó hoạt động. Gremlins :) – drago

2

Khi lỗi của bạn cho biết - bạn có một chuỗi trong số noSelection. Điều này không thể được chuyển đổi thành bất kỳ giá trị enum nào của bạn.

Hủy bỏ các dấu ngoặc kép của null của bạn và nó sẽ làm việc (nó làm việc cho tôi với grails 2.0):

<g:select name="ticketType" from="${app.domain.enums.TicketType?.values()}" 
          keys="${app.domain.enums.TicketType.values() }" 
          value="${ticketInstance?.ticketType}" 
          noSelection="${[null: 'Select One...']}"/> 
+0

Tôi đã thử rằng allready và nó vẫn không hoạt động. Bất kỳ ý tưởng nào khác? – drago

+0

g: chọn kết thúc sản xuất HTML, vì vậy nó không tạo ra bất kỳ sự khác biệt nào về giá trị khoảng trống, vì nó sẽ tạo ra giá trị = "null" ... – Deigote