gpt4 book ai didi

spring - 验证消息未从 Spring 的消息属性文件中提取

转载 作者:行者123 更新时间:2023-12-04 15:14:06 25 4
gpt4 key购买 nike

我昨天让它工作了,然后我做了一些事情,现在我一直在尝试修复它几个小时,但我再也无法让它工作了。

我有一个包含 <form:form> 的 Spring MVC 应用程序当用户输入错误信息时,我想从 .properties 文件显示自定义错误消息( <form:errors> )。 JSR-303 注释中定义了“错误”。

表格摘录:

<form:form method="post" action="adduserprofile" modelAttribute="bindableUserProfile">
<table>
<tr>
<td><form:label path="firstName">Voornaam</form:label></td>
<td>
<form:input path="firstName"/>
<form:errors path="firstName" />
</td>
</tr>
<tr>
<td><form:label path="lastName">Achternaam</form:label></td>
<td>
<form:input path="lastName"/>
<form:errors path="lastName" />
</td>
</tr>

BindableUserProfile 的摘录:
   @NotNull
@Size(min = 3, max = 40, message="{errors.requiredfield}")
public String getFirstName() {
return firstName;
}

public void setFirstName(String firstName) {
this.firstName = firstName;
}

@NotNull
@Size(min = 3, max = 40, message="errors.requiredfield")
public String getLastName() {
return lastName;
}

摘自 Controller :
    @RequestMapping(value = "/edit/{userProfileId}", method = RequestMethod.GET)
public String createOrUpdate(@PathVariable Long userProfileId, Model model) {
if (model.containsAttribute("bindableUserProfile")) {
model.addAttribute("userProfile", model.asMap().get("bindableUserProfile"));
} else {
UserProfile profile = userProfileService.findById(userProfileId);
if (profile != null) {
model.addAttribute(new BindableUserProfile(profile));
} else {
model.addAttribute(new BindableUserProfile());
}
}

model.addAttribute("includeFile", "forms/userprofileform.jsp");
return "main";
}

@RequestMapping(value = "/adduserprofile", method = RequestMethod.POST)
public String addUserProfile(@Valid BindableUserProfile userProfile, BindingResult result, Model model) {
if (result.hasErrors()) {
return createOrUpdate(null, model);
}

UserProfile profile = userProfile.asUserProfile();
userProfileService.addUserProfile(profile);
return "redirect:/userprofile";
}

摘自 application-context.xml
   <bean name="messageSource" class="org.springframework.context.support.ResourceBundleMessageSource">
<property name="basename" value="messages/messages"/>
</bean>

<bean id="validator" class="org.springframework.validation.beanvalidation.LocalValidatorFactoryBean">
<property name="validationMessageSource">
<ref bean="messageSource"/>
</property>
</bean>

在资源/消息中,我有两个文件,messages_en.properties 和 messages_nl.properties。两者都有相同的简单内容:
errors.requiredfield=This field is required!!!
  • 当我提交带有空名字的表单时,我可以在 Controller 方法“addUserProfile()”中看到确实发现了错误。
  • 当我提交带有空名字的表单时,消息标识符显示在字段旁边,即在姓氏的情况下,文字文本“errors.requiredfield”或“{errors.requiredfield}”。
  • 当我将消息属性值更改为“Foo”时,“Foo”显示为错误消息。所以错误机制本身似乎工作正常。
  • application-context.xml 中的 messageSource bean 必须是正确的,因为它说当我更改基本名称时它找不到属性文件。
  • NotNull 注释不会捕获空输入。 Spring 将空输入视为空字符串而不是 null。

  • 因此,似乎找到了属性文件并且正确处理了验证注释,但 Spring 不明白它必须用来自属性文件的消息替换消息键。

    最佳答案

    Yaaaargh,我认为这从一开始就不应该起作用。

    我认为可以将 JSR-303 注释的“消息”属性解释为键,以便从 message.properties 文件中获取相关的错误消息,但我认为我错了。
    @Size(min = 3, max = 40, message="errors.requiredfield")
    我在工作的同事编写了一个层,为我们创建了这种行为,但默认情况下它不起作用。好像我有一次工作,因为我正在使用
    @Size(min = 3, max = 40, message="{errors.requiredfield}")
    花括号导致 Spring 启动一个使用 .properties 文件作为源的查找和替换过程。不过,这第二个选项仍然有效。

    关于spring - 验证消息未从 Spring 的消息属性文件中提取,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11639876/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com