首页 > 解决方案 > 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”,而不是引用属性文件中的文本。有任何想法吗?

标签: javaspringspring-mvcjsp

解决方案


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>

该示例假定您有三个名为 的资源包 formatexceptionswindows在您的类路径中定义。


推荐阅读