I am using Spring to display messages from a properties file.  I would like to be able to override the <spring:message> tag to use a value from a database based on the logged in user.  If this value is not present I would like it to default to the value currently in the properties file as it does now.
Can someone help me with this code? I've read about AbstractMessageSource but I am unclear on how to implement it.
Thanks
You have to implement custom message source. It's a class that extends AbstractMessageSource and implements the abstract resolveCode(java.lang.String, java.util.Locale) method. There is almost same question on SO (it's solution for Grails), but I think it is good point to start from...
I ended up creating a class called DatabaseMessageSource included below. I still need to implement some kind of caching so I don't hit the database with each call. This link was helpful too. Thank you skaffman and PrimosK for pointing me in the right direction.
public class DatabaseMessageSource extends ReloadableResourceBundleMessageSource {
    @Autowired
    private MyDao myDao;
    protected MessageFormat resolveCode(String code, Locale locale) {
        MyObj myObj = myDao.findByCode(code);
        MessageFormat format;
        if (myObj!= null && myObj.getId() != null) {
            format = new MessageFormat(myObj.getValue(), locale);
        } else {
            format = super.resolveCode(code, locale);
        }
        return format;
    }
    protected String resolveCodeWithoutArguments(String code, Locale locale) {
        MyObj myObj = myDao.findByCode(code);
        String format;
        if (myObj != null && myObj.getId() != null) {
            format = myObj.getValue();
        } else {
            format = super.resolveCodeWithoutArguments(code, locale);
        }
        return format;
    }
}
I updated my applicationContext to point to the newly created class. I changed it to:
<bean id="messageSource" class="com.mycompany.mypackage.DatabaseMessageSource">
    <property name="basenames">
        <list>
            <value>classpath:defaultMessages</value>
        </list>
    </property>
    <property name="defaultEncoding" value="UTF-8"/>    
</bean>`enter code here`
                        If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With