如何从数据库而不是属性获取验证消息?

时间:2012-10-04 14:59:27

标签: grails grails-2.0

背景

我们正在迁移具有数据库中的字段标签的旧数据库。我们仍然使用messages.properties来获取一些静态资源,例如css类(名称)。该表看起来像:

ITEMS
-------------------------------------------
code           number(3)      not null PK
language_code  number(3)      not null PK
label          varchar2(90)   not null
hint           varchar2(250)  not null
help           varchar2(4000)
label_client   varchar2(90)   not null
hint_client    varchar2(250)  not null
help_client    varchar2(4000)

对于html组件,我们只是查找此表中的项目,设置他的标签(自定义TagLib),这很有效。请注意,我们还允许客户端修改一些标签(* _client字段)。

问题

默认情况下,Grails将尝试查找带有后缀.label的messages.properties以在验证错误消息中使用。例如(Person.name.label=name):

Property name must not be blank.

如果我的数据库中的项目具有人物名称Person,则在验证中这将是不一致的,因为输入的标签不同。

我们无法将项目与.properties同步,因为客户端可以更改它们。因此,解决方案是以某种方式修改Grails验证消息以返回数据库的内容。

这可能吗?我如何才能从数据库中获取验证消息而不是属性?

2 个答案:

答案 0 :(得分:0)

This blog post建议你可以通过实现自己的messageSource Spring bean并在resources.groovy中注册它来实现。它的历史可以追溯到2010年,但仍值得一试。

答案 1 :(得分:0)

您可以使用本地化插件! ;)

http://grails.org/plugin/localizations

从插件概述:

此插件将从数据库中提取i18n定义,而不是从i18n文件夹中的标准属性文件中提取。

它将执行以下操作:

创建一个名为Localization的域类和相应的表 使用在i18n文件夹中找到的所有消息属性预填充表 确保Grails根据它在数据库中找到的内容而不是118n文件夹

来编写i18n消息

此外,该插件还具有以下附加功能,可以帮助您:

用于添加,删除和更新i18n消息的CRUD UI 缓存以提高速度 JSONP操作,可用于客户端模板。