在Spring Validator Class中读取属性文件的内容

时间:2010-09-01 10:34:13

标签: java spring spring-mvc

我正在使用Spring 3.0。我可以从localdrive读取属性文件,例如:C:\ prop \ mylogin.properties(不在webapps / application server下)

mylogin.properties

login.heading=Login
login.username=Username
login.password_blank=Password cannot be blank

我想在Validator类(java bean类)中使用上面的内容。 请注意:我使用MultiAction Controller而不是SpringFormController

 public class MyUserValidator implements Validator 
    {

@Override
    public void validate(Object command, Errors errors) {
         String msg=null;
     //some conditions checked
         String msg=login.password_blank;-------->get from property file ??
        errors.rejectValue("User",msg,"defaultvalue");   

}

您好我们正在使用资源包,不知道如何在验证器中使用它?

<bean id="messageSource" class="org.springframework.context.support.ReloadableResourceBundleMessageSource" lazy-init="true"> 
       <property name="basenames"> 
       <list> 

      <value>${deployment.properties.path}/xyzsite/mylogin</value>   

 </list> 
 </property> 
<property name="cacheSeconds" value="${deployment.properties.cache_in_seconds}"/> 
</bean> 

如果使用了资源包,你提到的答案会有什么变化?

例如,如果我想设置PageSize int pagesize = 5; ---&GT;从属性文件中获取

mylogin.properties

login.heading=Login
login.username=Username
login.password_blank=Password cannot be blank
login.page_row_size=5

2 个答案:

答案 0 :(得分:2)

错误消息通常最好作为Java ResourceBundle和JSTL的标准组合来处理,但这不适用于从文件系统上的任意位置加载属性。

所以你必须手动做一些事情。最简单的方法是注入属性文件的位置,然后从中提取属性:

public class MyUserValidator implements Validator {

    private Resource propertiesLocation;

    @Required
    public void setPropertiesLocation(Resource propertiesLocation) {
        this.propertiesLocation = propertiesLocation;
    }

    @Override
    public void validate(Object command, Errors errors) {
        try {
            Properties props = PropertiesLoaderUtils.loadProperties(propertiesLocation);

            String key = "login.password_blank";
            String errorMessage = props.getProperty(key);
            errors.rejectValue("User", key, errorMessage);
        } catch (IOException e) {
            // handle me
        }
    }
}

并在配置中:

<bean id="userValidator" class="com.x.MyUserValidator">
  <property name="propertiesLocation" value="file:/prop/mylogin.properties"/>
</bean>

请注意以下一行:

errors.rejectValue("User", key, errorMessage);

由于您未使用ResourceBundle,因此需要传递“默认错误消息”作为第3个参数。

答案 1 :(得分:-1)

好吧通过以下方式对此进行了排序 mav = new ModelAndView mav.addAllObjects(errors.getModel());

并在jsp中使用