2012-07-26 153 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