I finally found out the problem.
Everything is set correctly in struts-config.xml and my resource bundle, etc.
The root cause is that I have several web modules in my ear file. Some of them have their own Struts jar files, ranging form 1.0 to 1.2, inside their war files. I also have Struts 1.2 jar files included in my ear file used by some other modules.
This causes class loading conflicts and unfortunately, Struts 1.2 seems not so backward compatible.
Any ways, my solution is to let each web module has its own Struts jars in the war file, remove the copy inside the ear file, and set the UseJBossWebLoader to false (in deploy/jbossweb-tomcat50.sar/META-INF/jboss-service.xml).
This way, different web modules can use different versions of Struts.