웹 응용 프로그램에 BIRT를 통합했습니다. Eclipse Luna, JDK 1.8, BIRT 보고서 엔진 4.1.1 및 을 사용하고 있습니다. 데이터 원본은 Excel 데이터 원본 그리고 그 모든 것). `JSP 페이지에서 여러 값을 전달하는 BIRT 보고서 매개 변수
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);
}
});
보고서 매개 변수 "금속"내가 선택한 디스플레이 유형에 대해
: 목록 상자, 데이터 형식 : 내 JSP 페이지에서 내가 좋아하는 자바 스크립트 AJAX를 사용하여 URL에서 두 개의 매개 변수를 전달하고 문자열을 동적 값을 선택하고 "Allow Multiple Values"체크 박스를 체크합니다.
row["Supplier Name"] Equal to params["Supplier"].value
row["Metal"] In params["Metal"].value
을 내 ReportRenderer.java에서 JavaEE 어플 관점이 전환 후, 나는 여러 값이과 관련된 얻을 코드 다음 한 다음 그런 다음 필터 탭에서 테이블의 속성 편집기에서 나는 표현을 준 나는 모든 매개 변수를 얻고있다 및 그것의는 HashMap에서
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;
}
: "금속"매개 변수 (URL에서 전달되는), I는 쉼표로 그 값을 합병 한 (,)와 같은 하나의 문자열 변수에 목록을 구분 각각의 값은 성공적으로지도를 설정했습니다.
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의 개체입니다. 이제 웹 응용 프로그램을 실행할 때 "Reports"라는 하이퍼 링크를 클릭 한 후 콘솔에서 예외가 발생하고 웹 페이지에는 출력이 표시되지 않습니다.
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 데이터 소스와 관련되어 있으며 많은 도움이되지 않는 많은 블로그를 이미 보았습니다.