我已经设置了一个BIRT(3.7)servlet,如下所述:http://wiki.eclipse.org/Servlet_Example_(BIRT)_2.1。
在我的报告中,我声明了一个属性文件资源并对报告的标签进行了本地化。我创建了一个默认属性文件,其中包含德语和包含英语的“en_GB”文件。在预览部分,这工作正常。
我将Web应用程序部署到Websphere服务器,但是在呈现报表时,不显示本地化文本。标签显示其未本地化的文本,JavaScript提取的文本都是“空”。
我假设找不到属性文件。
在servlet中我必须做些什么来告诉BIRT在哪里寻找资源?例如将上下文根添加到文件名。
解决方案
感谢@Dominique提供的setResourcePath
小费。我也必须做出其他一些改变。
beforeFactory
脚本:reportContext.getDesignHandle().setStringProperty("locale", params["Locale"].value);
birtReportEngine.getConfig().setResourcePath(request.getContextPath() + "/birt");
答案 0 :(得分:2)
您需要使用方法 EngineConfig.setResourcePath 设置资源的根路径。在您链接的示例中,您需要在创建引擎之前调用它:
config.setResourcePath("C:/path-to-my-resources-root");
答案 1 :(得分:1)
我想分享一些令我非常头痛的调查结果。
如上所述,BIRT显然正在使用设计时路径查找资源属性文件,例如: <BIRT default resource path>/src/main/resources/messages
messages_<locale>.properties
文件(Maven结构)。
但是在运行时,属性文件将位于WEB-INF/classes
中,用于Web应用程序。
为了维护设计时本地化,我不会修改资源属性文件对话框中的路径,如上所述,但在运行时提供了一个额外的属性文件条目。
所以完整的解决方案看起来像这样:
EngineConfig config = new EngineConfig();
config.setResourcePath(context.getContextPath()+"WEB-INF/classes");
Platform.startup(config);
messages_<locale>.properties
IReportRunnable report = engine.openReportDesign(reportDesign);
report.getDesignHandle().setProperty("includeResource", "messages");
task.setLocale(new Locale("en", "US"));
Voilá,现在您有一个报告设计,本地化处理设计时和运行时。
希望这会对某人有所帮助。
亲切的问候,Tilo