我正在使用Grails框架.在我的用户控制器中,我有一个名为"active"的布尔字段,它控制是否允许用户登录.登录操作在用户登录时检查此值.
我的域名:
class User {
Boolean active
}
Run Code Online (Sandbox Code Playgroud)
我的观点(edit.gsp):
<g:select id="active" name="active" from="${[1,0]}" value="${userInstance?.active}" />
Run Code Online (Sandbox Code Playgroud)
该值正确保存到数据库中,但我希望"帐户状态"下拉列表显示"已启用"或"已禁用",而不是现在的"1"或"0".
它还应该在加载编辑页面时显示当前值.目前,即使用户在数据库中具有值"0",它也始终显示值"1".
这看起来很容易,但是我还没有找到任何人在GSP中设置下拉值的例子,到目前为止我没有尝试过任何工作.谢谢!
Ove*_*ous 11
我在文档中看到了两个解决方案.
一个是我们keys标签的参数:
<g:select id="active" name="active" from="${['Enabled','Disabled']}" keys="${[1,0]}" value="${userInstance?.active}" />
Run Code Online (Sandbox Code Playgroud)
这提供了不同的键列表与值列表.
另一种解决方案是使用optionKey和/或optionValue参数,但这将要求列表包含可用于查找值的对象或类似内容:
在src/groovy/BooleanSelectOption.groovy:
class BooleanSelectOption {
String name
String value
private BooleanSelectOption(name, value) {
this.name = name
this.value = value
}
private static List _list;
public static List getList() {
if(!BooleanSelectOption._list) {
BooleanSelectOption._list = [new BooleanSelectOption('Enabled',1), new BooleanSelectOption('Disabled',2)]
}
BooleanSelectOption._list
}
public String toString() { name }
}
Run Code Online (Sandbox Code Playgroud)
在你看来:
<g:select id="active" name="active" from="${BooleanSelectOption.list}" optionKey="value" value="${userInstance?.active}" />
Run Code Online (Sandbox Code Playgroud)
现在标签正在根据列表中项目的bean属性查找键.此外,enum也可以在这里工作.
显然,第一种技术对于短名单更为清晰,但我想为更复杂的情况展示两种选择.我也没有测试过第二个例子.
还有一点需要注意:您可能会发现密钥0并1没有真正起作用,因为Disabled如果值是,则不会被选中(根据我的经验)false.我不知道你是否能逃脱使用true和false,但你应该测试,以确保你得到你所期望的.
实际上还有第三个选项,可能是最强大的解决方案,也在文档中:
使用该valueMessagePrefix参数可以从i18n消息中查找显示的值.
在grails-app/i18n/messages.groovy:
boolean.select.0=Disabled
boolean.select.1=Enabled
Run Code Online (Sandbox Code Playgroud)
在你看来:
<g:select id="active" name="active" from="${[1,0]}" value="${userInstance?.active}" valueMessagePrefix="boolean.select" />
Run Code Online (Sandbox Code Playgroud)
如果您需要,这还有一个额外的好处,即允许您为不同的语言使用不同的标签.
| 归档时间: |
|
| 查看次数: |
17629 次 |
| 最近记录: |