BIRT没有在运行时找到包含本地化的.properties文件(servlet)

时间:2014-08-13 08:33:10

标签: java servlets birt

我已经设置了一个BIRT(3.7)servlet,如下所述:http://wiki.eclipse.org/Servlet_Example_(BIRT)_2.1

在我的报告中,我声明了一个属性文件资源并对报告的标签进行了本地化。我创建了一个默认属性文件,其中包含德语和包含英语的“en_GB”文件。在预览部分,这工作正常。

我将Web应用程序部署到Websphere服务器,但是在呈现报表时,不显示本地化文本。标签显示其未本地化的文本,JavaScript提取的文本都是“空”。

我假设找不到属性文件。

在servlet中我必须做些什么来告诉BIRT在哪里寻找资源?例如将上下文根添加到文件名。

解决方案

感谢@Dominique提供的setResourcePath小费。我也必须做出其他一些改变。

  • 在报告资源中,我声明了'WebContent / birt / propfile'。将此更改为'propfile'。
  • 已将参数'__locale'传递给报告。定义了一个新参数'Locale'并改为使用它。
  • 添加了beforeFactory脚本:reportContext.getDesignHandle().setStringProperty("locale", params["Locale"].value);
  • 在servlet中添加了以下内容:birtReportEngine.getConfig().setResourcePath(request.getContextPath() + "/birt");

2 个答案:

答案 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