【问题标题】:Spring MVC - one message code works, another not and both are in the same fileSpring MVC - 一个消息代码有效,另一个不有效,两者都在同一个文件中
【发布时间】:2015-12-24 10:16:55
【问题描述】:

我收到此错误:

No message found under code 'DuplicateKey.user.username' for locale 'sk_SK'.

关于消息文件没有正确加载的问题有很多,但我的问题是文件确实正确加载。在我的资源包中,我有两个文件: 消息属性 messages_sk_SK.properties

messages_sk_SK.properties 的内容是:

Size.user.username=Meno musi mat 5 az 80 znakov.
DuplicateKey.user.username=Uzivatel s takym menom uz existuje.

第一条消息工作正常。我的实体的代码:

@Size(min = 5, max = 80)
private String username;

第二条错误消息也是针对用户名的。这是来自我的控制器的代码:

@RequestMapping(value = "/signup", method = RequestMethod.POST)
public String signupPost(@Valid User user, BindingResult result) {
    if (result.hasErrors()) {
        return "signup";
    }

    user.setAuthority("user");
    user.setEnabled(true);

    try {
        userService.create(user);
    } catch (DuplicateKeyException e) {
        result.rejectValue("username", "DuplicateKey.user.username");
        return "signup";
    }

    return "accountcreated";
}

重复的用户名会引发 DuplicateKeyException。这怎么可能?

【问题讨论】:

  • 我假设您的 messages.properties 文件被选择用于任何其他语言环境?该文件是否包含相同的消息,并且该文件是否正常工作?
  • 两个错误码是一样的,但是信息都是英文的。我正在学习一个教程,首先我只有 messages.properties 文件和 Size.user.username 消息。它工作得很好。在我添加了 result.rejectValue(...) 代码和其中的第二条消息后,我得到了与现在“未找到消息 ...”相同的异常。所以我创建了 ...sk_SK 文件并将两条消息都放在那里,但使用的是斯洛伐克语。现在 Size.user.username 在斯洛伐克语中正确显示,但 DuplicateKey.user.username 出现与以前相同的错误。
  • 好的,所以要完全清楚 DuplicateKey.user.username 从来没有工作过,对于任何一个语言环境?
  • 您是否尝试在您的catch 块中将该错误键换成Size.user.username?这将告诉您问题是否出在该特定消息中或其他内容中。另外,如果您将第三个字符串添加到result.rejectValue(),会发生什么情况,默认情况下会显示吗?
  • 如果我尝试使用 Size.user.username,它可以工作。添加第三个参数(默认消息)也可以。

标签: java spring resourcebundle


【解决方案1】:

好的,我解决了。根据我正在关注的教程中的 cmets (link),您必须在 IntelliJ IDEA 中以另一种方式进行操作(他们在教程中使用 Eclipse)。我确实将消息文件移动到资源文件夹,所以现在我的目录结构是

src
  - main
    - java (sources)
    - resources (messages files)
    - webapp (WEB-INF, JSPs etc.)

在我的配置 xml 中:

<bean id="messageSource" class="org.springframework.context.support.ResourceBundleMessageSource">
    <property name="basenames" value="messages"/>
</bean>

您必须右键单击资源目录并将目录标记为 -> 资源文件夹。消息文件应该出现在另一个名为 Resource Bundle 'messages' 的节点中。现在它可以正常工作了。如果在messages_sk_SK.properties 中没有找到消息,它会尝试在messages.properties 中找到它。

【讨论】:

    猜你喜欢
    • 2020-06-26
    • 1970-01-01
    • 2020-12-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-11-27
    • 2023-03-17
    • 2022-01-14
    相关资源
    最近更新 更多