我有以下组合框:
<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 :(得分:15)
您是否尝试使用空字符串作为noSelection属性,而不是使用'null'文字?例如noSelection="${['':'Select One...']}"
?这可以在数据绑定期间正确转换为真正的空值。
答案 1 :(得分: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...']}"/>
答案 2 :(得分:0)
在 Rails 3.3.x 下,提供“空”值没有任何变化。最后,我通过在使用任何参数之前将这一行添加到 controller+action 中来解决它:
// convert "null" strings to REAL nulls
params.account.each { it.value = (it.value == 'null' ? null : it.value) }
之后,以下工作正常:
account.properties = params.account