Grails在选择(下拉菜单)中为布尔值设置值

Grails在选择(下拉菜单)中为布尔值设置值,grails,groovy,Grails,Groovy,我正在使用Grails框架。在我的用户控制器中,有一个名为“active”的布尔字段,用于控制是否允许用户登录。登录操作在用户登录时检查此值 我的域名: class User { Boolean active } 我的视图(edit.gsp): 该值正确地保存到数据库中,但我希望帐户状态下拉列表显示“已启用”或“已禁用”,而不是现在的“1”或“0” 加载编辑页面时,它还应显示当前值。当前,它始终显示值“1”,即使用户在数据库中的值为“0” 这似乎很容易,但我还没有找到任何人在GSP中设

我正在使用Grails框架。在我的用户控制器中,有一个名为“active”的布尔字段,用于控制是否允许用户登录。登录操作在用户登录时检查此值

我的域名:

class User {
  Boolean active
}
我的视图(edit.gsp):


该值正确地保存到数据库中,但我希望帐户状态下拉列表显示“已启用”或“已禁用”,而不是现在的“1”或“0”

加载编辑页面时,它还应显示当前值。当前,它始终显示值“1”,即使用户在数据库中的值为“0”

这似乎很容易,但我还没有找到任何人在GSP中设置下拉值的例子,到目前为止我所做的任何尝试都不起作用。谢谢

我看到两种解决方案,都是

一个是标签的
参数:

<g:select id="active" name="active" from="${['Enabled','Disabled']}" keys="${[1,0]}" value="${userInstance?.active}" />
在你看来:

<g:select id="active" name="active" from="${BooleanSelectOption.list}" optionKey="value" value="${userInstance?.active}" />
<g:select id="active" name="active" from="${[1,0]}" value="${userInstance?.active}" valueMessagePrefix="boolean.select" />
在你看来:

<g:select id="active" name="active" from="${BooleanSelectOption.list}" optionKey="value" value="${userInstance?.active}" />
<g:select id="active" name="active" from="${[1,0]}" value="${userInstance?.active}" valueMessagePrefix="boolean.select" />


如果需要,还可以为不同的语言使用不同的标签。

您可以使用
optionKey
optionValue
为键和值使用对象属性或映射值。试着这样做:

<g:select name="active" optionKey="key" optionValue="value"
 from="${[[key: 1, value: 'Enabled'],[key: 0, value: 'Disabled']]}"/>

作为类似情况的替代方案,当出现比任务要求更多的处理时,请记住,您可以回退到普通的旧html。例如

<select name="active">
 <option value="0" ${!active ? 'selected' : ''}>Disabled</option>
 <option value="1" ${active ? 'selected' : ''}>Enabled</option>
</select>

残废
启用

我在代码中使用了第一种方法,现在您指出了第三种方法,我非常喜欢。同意,第三种使用valueMessagePrefix的方法看起来很不错。我今天一定是瞎了。我一遍又一遍地看文档,没有注意到关键行。非常感谢你。我必须将其设置为keys=“${[true,false]}”,才能正确显示值,这样我的经验与您的经验相符。第三条路很有趣。这是一个很好的答案,值得赞赏
<select name="active">
 <option value="0" ${!active ? 'selected' : ''}>Disabled</option>
 <option value="1" ${active ? 'selected' : ''}>Enabled</option>
</select>