需求描述:定义一个消息的状态,分别是:未审核(UNVERIFY),审核成功(VERIFIED_SUCCESS),审核失败(VERIFIED_FALSE)。将状态保存到数据表中。

处理过程:

1.定义枚举类:

enum MessageStatus { UNVERIFY(0, '未审核'), VERIFIED_SUCCESS(1, '审核成功'), VERIFIED_FALSE(2, '审核失败') String label int id MessageStatus( int id, String label) { this.id = id this.label = label } }

(看过一个例子,说可以在domain类的最上面部分定义枚举类,但是我试过总会报错)

2.定义domain类

class MessageDetail { String mname MessageStatus status static constraints = { } static mapping = { status enumType: 'ordinal' // 默认Hibernate是使用枚举类的名称保存到数据库中,使用该字段可以将状态转换为id存储 } }

 

3.分别生成controller和views

4.修改views的显示,在views视图中,默认显示状态是枚举类的名称,我们要求显示自定义的lebel(这部分我还不会使用国际化),注意:定义的枚举类必须使用UTF-8编码

create.gsp

<td valign=" top" class=" value ${hasErrors(bean: messageDetailInstance, field: 'status', 'errors')}"> <g:select name=" status" from=" ${test.MessageStatus?.values()}" value=" ${messageDetailInstance?.status}" optionValue='label' /> </td>

增加:optionValue=’label’即可。手册上说,使用:valueMessagePrefix可以解决输出的国际化,但是试过很多次,还是有问题,就干脆在枚举类文件中定义了。

show.gsp修改状态显示字段,追加label的属性即可。

${messageDetailInstance?.status?.label.encodeAsHTML()}

如图所示:image    image

 

知其然,不知其所以然。