你可能会尝试一些事情.
< FMT:setBundle>最终将调用ResourceBundle.getBundle(String,Locale,ClassLoader),其中字符串将是您的基本名称,类加载器将是Thread.currentThread().getContextClassLoader().如果您使用的是JDK 1.6,则可以尝试使用ResourceBundle.clearCache(ClassLoader)清除捆绑缓存.在servlet过滤器中执行此操作并将其与其他逻辑组合以确定何时应清除缓存是有意义的.
另一个角度是更直接地控制属性文件的加载和JSTL的配置.再次,使用过滤器(忽略异常处理):
ClassLoader ctxLoader = Thread.currentThread().getContextClassLoader();
URL propsURL = ctxLoader.getResource("opto-mapping.properties");
URLConnection propsConn = propsURL.openConnection();
long propsLastModified = propsConn.getLastModified();
// decide if you want to reload...
propsConn.setUseCaches(false);
InputStream propsIn = propsConn.getInputStream();
ResourceBundle propsBundle = new PropertyResourceBundle(propsIn);
propsIn.close();
LocalizationContext propsCtx = new LocalizationContext(propsBundle);
ServletContext servletCtx = this.filterConfig.getServletContext();
Config.set(servletCtx,Config.FMT_LOCALIZATION_CONTEXT,propsCtx);
然后你可以使用< fmt:message>在你的页面中.您可以在JSTL API中找到LocalizationContext和Config的文档.
许多其他变体是可能的,但请务必查看JDK 1.6中新增的ResourceBundle(包括ResourceBundle.Control),记住URLConnection等“低级”API的功能,并熟悉更多JSTL的程序化方面可通过其API获得.