java - Spring MVC Controller 引用属性文件中的字符串
问题描述
尝试使用 Spring MVC 访问属性文件中的键值对时遇到了一些问题。
这是我存储属性文件的位置:../common/properties/AppResource.properties
.
文件中的键值对示例:
error.password.mismatch=Invalid userid and/or password, please try again
在我的 servlet.xml 中,我声明了以下 bean:
<bean name="messageSource" class="org.springframework.context.support.ResourceBundleMessageSource">
<property name="basename">
<value>classpath*:common/properties/*.properties</value>
</property>
在我的控制器中,我试图访问键值对:
} catch (UserNotFoundException e) {
model.addAttribute("errorMessage", "error.password.mismatch");
return "login";
}
在我的 JSP 页面中,我正在打印错误消息:
<font class="errorClass"><form:errors path="errorMessage" /></font>
但是,打印出来的消息是“error.password.mismatch”,而不是引用属性文件中的文本。有任何想法吗?
解决方案
的path
属性<form:errors/>
表示要显示错误的字段。您将需要针对该字段注册一个字段错误。
如果您使用自定义Validator
,
@Override
public void validate(Object target, Errors errors) {
// your logic here
errors.rejectValue("fieldName", "error.password.mismatch");
}
在 JSP 中:
<form:errors path="fieldName"/>
笔记:
如果您想以不同于使用<form:errors/>
标签的方式显示消息,
你可以做
<%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt" %>
<fmt:message key="error.password.mismatch"/>
或者
<%@ taglib prefix="s" uri="http://www.springframework.org/tags" %>
<s:message code="error.password.mismatch"/>
或者
如果要从控制器解析值,可以使用MessageSourceAccessor
.
<bean id="messageSourceAccessor" class="org.springframework.context.support.MessageSourceAccessor">
<constructor-arg ref="messageSource"/>
</bean>
在控制器中:
@Autowired
private MessageSourceAccessor messageSourceAccessor;
和
model.addAttribute("someMessage", messageSourceAccessor.getMessage("error.password.mismatch"));
在 JSP 中:
<c:out value="${someMessage}"/>
回答OP的评论:
如果我使用 MessageSourceAccesor,我在哪里声明属性文件的路径?
来自Spring 框架参考:
<beans> <bean id="messageSource" class="org.springframework.context.support.ResourceBundleMessageSource"> <property name="basenames"> <list> <value>format</value> <value>exceptions</value> <value>windows</value> </list> </property> </bean> </beans>
该示例假定您有三个名为 的资源包
format
,exceptions
并windows
在您的类路径中定义。
推荐阅读
- html - 使用文本框转到特定页面
- scala - 测试 scala 单例对象的方法是否正在调用另一个方法
- php - PHP 调用未定义的函数 oci_connect()
- html - 自动边距扩展在 IE11 上的弹性框内不起作用
- r - stacking two levels of a factor in ggplot and split(branch) lines at their division
- python - 如何从 IP 地址列表中识别私有 IP?
- authentication - 尝试在 Cakephp 3.6 中添加用户时出现内部错误 500
- ansible - 将 Ansible 保险库用于 Ansible 的 ssh 密钥文件
- android - Flutter插件的UI测试
- c# - How to flag files/folder as not in solution with DotNetCore projects?