0

我有一个带有控制器、模型、服务和验证类的 Spring mvc 应用程序。一切正常。在开发我目前拥有的东西时,我将验证消息存储在一个 messages.properties 文件中——我在这样的配置类中注册了该文件:

@Bean
public MessageSource messageSource() {

    final ResourceBundleMessageSource messageSource = new ResourceBundleMessageSource();
    messageSource.setBasename("[package name]/messages/messages");

    return messageSource;
}

在验证器中,如果用户没有回答这样的字段,我会添加一条验证消息:

ValidationUtils.rejectIfEmptyOrWhitespace(errors, "age", "required", new Object[] {"Age"});

在 messages.properties 文件中我有这个('age' 上面是模型对象的名称,'required' 是用于在 messages.properties 文件中检索消息的键):

required = {0} is required.

好的,再次 - 这一切都很好。但我想做的是将消息外部化到数据库(基本上,这些是所有应用程序都使用的公司消息)。

我的问题是 - 如何让 Spring 使用数据库而不是 messages.properties?还是我确实使用messages.properties,只存储消息的id(数据库键)而不是消息本身?

我对该怎么做有几个想法 - 但不知道如何做任何一个。我“认为”Spring-form 标记库最终会执行获取实际消息的工作。也许我可以以某种方式拦截那个电话?或者也许以某种方式将 messageSource 更改为其他内容,而不是定义 messages.properties 文件。

无论如何,有人有什么想法吗?

4

2 回答 2

1

你可以试试Errors.rejectValue(String field, String errorCode, String defaultMessage)方法。我也有同样的问题。在我的情况下,我使用...errors.rejectValue("firstName", "error.firstName", "plz enter ur first name!!.");

理想情况下,这应该defaultMessage在无法从消息源中找到错误代码的情况下使用。

于 2018-04-11T10:25:44.023 回答
0

而不是使用 ResourceBundleMessageSource 使用自定义 MessageSource 实现,该实现返回到数据库中。不幸的是 Spring 本身没有这样的实现,如 jira 问题中所述: https ://jira.springsource.org/browse/SPR-364

但是实现 MessageSource 接口很简单,您甚至可以看到 jira 问题附带的示例实现:https ://jira.springsource.org/secure/attachment/10261/JdbcMessageSource.java

于 2012-10-25T23:39:57.530 回答