【发布时间】:2015-01-14 09:34:35
【问题描述】:
我已将 BIRT 集成到 Web 应用程序中。我正在使用 Eclipse Luna、JDK 1.8、BIRT Report Engine 4.1.1 和 我使用的数据源是 Excel 数据源(不是 JDBC 等) .在我的 JSP 页面中,我使用 Javascript AJAX 在 URL 中传递了两个参数,例如:`
var reporturl ="/Reporting/loadReport?ReportName="+reportName+"&ReportFormat=html&Supplier=Supplier4&Metal=Gold&Metal=Tin";
$("#reportData").html("Loading...<br><img src='/Reporting/resources/images/loading.gif' align='middle' >");
$('#reportData').load(reporturl ,function(response, status, xhr) {
if (status == "error") {
var msg = "Sorry but there was an error getting details ! ";
$("#reportData").html(msg + xhr.status + " " + xhr.statusText);
}
});
对于报告参数“金属”,我选择了显示类型:列表框、数据类型:字符串并选择了动态值,然后选中了“允许多个值”复选框。然后在表格的属性编辑器中,在过滤器选项卡中,我给出了如下表达式:
row["Supplier Name"] Equal to params["Supplier"].value
row["Metal"] In params["Metal"].value
在 ReportRenderer.java 中切换到 JavaEE 透视图后,我有以下代码来获取与“Metal”参数关联的多个值(从 URL 传递),我已将这些值合并为逗号(, ) 单个字符串变量中的分隔列表,例如:
public static String getParameter( HttpServletRequest request,
String parameterName )
{
if ( request.getCharacterEncoding( ) == null )
{
try
{
request.setCharacterEncoding( UTF_8_ENCODE );
}
catch ( UnsupportedEncodingException e )
{
}
}
String[] values = request.getParameterValues(parameterName);
String temp="";
if(values.length>1)
{
int i=0;
for(i=0;i<values.length-1;i++)
{
temp=temp+values[i]+",";
}
temp=temp+values[i];
}
else
{
temp = values[0];
}
return temp;
}
在 HashMap 中,我成功获取了所有参数及其各自的值,并将该 Map 设置为:
HashMap<String,Object> tempMap = new HashMap<String,Object>();
tempMap = discoverAndSetParameters( runnable, request );
for(String str : tempMap.keySet())
{
System.out.println("Key : "+str);
System.out.println("Value : "+tempMap.get(str));
}
iRunTask.setParameterValues(tempMap);
这里runnable是IReportRunnable的对象,request是HttpServletRequest的对象。 现在,当我运行 Web 应用程序时,单击名为“报告”的超链接后,我在控制台上收到以下异常,而网页上没有输出。
org.eclipse.birt.report.engine.api.impl.ParameterValidationException: The type of parameter "Metal" is expected as "Object[]", not "java.lang.String".
at org.eclipse.birt.report.engine.api.impl.EngineTask.validateAbstractScalarParameter(EngineTask.java:857)
at org.eclipse.birt.report.engine.api.impl.EngineTask.access$0(EngineTask.java:789)
at org.eclipse.birt.report.engine.api.impl.EngineTask$ParameterValidationVisitor.visitScalarParameter(EngineTask.java:706)
at org.eclipse.birt.report.engine.api.impl.EngineTask$ParameterVisitor.visit(EngineTask.java:1531)
at org.eclipse.birt.report.engine.api.impl.EngineTask.doValidateParameters(EngineTask.java:692)
at org.eclipse.birt.report.engine.api.impl.RunTask.doRun(RunTask.java:214)
at org.eclipse.birt.report.engine.api.impl.RunTask.run(RunTask.java:86)
请帮助我如何解决这个问题,我再次指定我使用的是 Excel 数据源,而不是 JDBC 或脚本等等。我已经浏览了许多与 JDBC 数据源相关的问题的博客,但对我没有帮助。
【问题讨论】: