2012-07-26 167 views
6

我有以下組合框:的Grails G:選擇沒有選擇

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

我設置以下約束的ticketType在命令對象

ticketType nullable: true, blank:true 

TicketType是一個非常簡單枚舉:

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

而且我每次沒有在我的GSP中爲ticketType設置一些值時,出現以下錯誤:

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

這就像在沒有選擇的情況下g:select設置「null」(字符串)的值。

我錯過了什麼?

+0

請顯示你的'g:select'的代碼... – aiolos 2012-07-26 12:50:26

+0

@aiolos對不起 - 格式化時出現了一些錯誤。我編輯了我的帖子。 – drago 2012-07-26 13:03:39

回答

14

而不是使用「空」的文字,你試圖使用一個空字符串作爲你的noSelection屬性?例如noSelection="${['':'Select One...']}"?這可能會在數據綁定期間正確轉換爲真值。

+0

這就是我通常這樣做,但它沒有奏效。所以我玩了不同的選擇。同時,我更改了控制器和服務中的一些代碼,並將noSelection返回爲noSelection =「$ {['':'Select One ...']}」,現在它可以工作。 Gremlins :) – drago 2012-07-26 14:49:51

2

正如您的錯誤所述 - 您的noSelection中有一個字符串。這不能轉換爲任何枚舉值。

刪除您null的引號,它應該工作(它爲我工作在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

我試過這樣做,但它仍然無法正常工作。任何其他想法? – drago 2012-07-26 13:30:32

+0

g:選擇結束生成HTML,所以它沒有任何區別引用空值,因爲它會產生value =「null」無論如何...... – Deigote 2013-10-30 15:37:03