java 报告将 json 作为表达式传递
java ireport passing json as expression
我正在按照 this 教程将 json 传递给 jrxml。
我的虚拟 json 文件成功解析为好看的报告。
但是我在将 json 代码传递给 jrxml 时遇到了问题。
在this教程中有如下图的配置
我试过这样 json
Map<String,Object> params = new HashMap<String,Object>();
String sPath = "/reports/master_standar_test_kertas.jrxml";
URL uReport = this.getClass().getResource(sPath);
String sJson = "{\"parameter\": { \"status\":\"success\" },\"data\":[{\"kode\":\"001\",\"title\":\"ENAMEL\"}]}";
System.out.println((new JSONObject(sJson)));
InputStream is = new ByteArrayInputStream(sJson.getBytes());
JsonDataSource source = new JsonDataSource(is);
params.put(JsonQueryExecuterFactory.JSON_SOURCE, is);
JasperReport jr = JasperCompileManager.compileReport(uReport.getPath());
JasperPrint jpPrint = JasperFillManager.fillReport(jr, params,source);
JasperViewer jpView = new JasperViewer(jpPrint);
但我收到错误
net.sf.jasperreports.engine.fill.JRExpressionEvalException: Error evaluating expression for source text: $P{net.sf.jasperreports.json.source}
我的问题:
- 我确定我的代码是错误的,但我不知道确切的错误代码
- 我真的很想了解 jasperreport 的工作原理,但我是 java 的新手,有什么我可以阅读的教程...?
我会尝试设置JsonQueryExecuterFactory.JSON_INPUT_STREAM parameter instead, as it seems to be exactly what you need. The JsonQueryExecuterFactory.JSON_SOURCE参数只能是:
- 类路径上的资源
- 来自文件系统的文件,具有绝对或相对路径
- 一个url
大多数用于熟悉 JasperReports 的资源都可以在 Jaspersoft Community 网站上找到。
您可能会发现有用的:
- JasperReports Ultimate Guide
- Wiki or the Answers 部分
对于我遇到的问题,我有自己的解决方案,也许有人也需要解决方案。
此代码
params.put(JsonQueryExecuterFactory.JSON_SOURCE, is);
我替换为
params.put(JsonQueryExecuterFactory.JSON_SOURCE, "/path/to/file.json");
或替换为 http 服务器响应
params.put(JsonQueryExecuterFactory.JSON_SOURCE, "htttp://localhost:12345/data.json");
我正在按照 this 教程将 json 传递给 jrxml。 我的虚拟 json 文件成功解析为好看的报告。
但是我在将 json 代码传递给 jrxml 时遇到了问题。 在this教程中有如下图的配置
我试过这样 json
Map<String,Object> params = new HashMap<String,Object>();
String sPath = "/reports/master_standar_test_kertas.jrxml";
URL uReport = this.getClass().getResource(sPath);
String sJson = "{\"parameter\": { \"status\":\"success\" },\"data\":[{\"kode\":\"001\",\"title\":\"ENAMEL\"}]}";
System.out.println((new JSONObject(sJson)));
InputStream is = new ByteArrayInputStream(sJson.getBytes());
JsonDataSource source = new JsonDataSource(is);
params.put(JsonQueryExecuterFactory.JSON_SOURCE, is);
JasperReport jr = JasperCompileManager.compileReport(uReport.getPath());
JasperPrint jpPrint = JasperFillManager.fillReport(jr, params,source);
JasperViewer jpView = new JasperViewer(jpPrint);
但我收到错误
net.sf.jasperreports.engine.fill.JRExpressionEvalException: Error evaluating expression for source text: $P{net.sf.jasperreports.json.source}
我的问题:
- 我确定我的代码是错误的,但我不知道确切的错误代码
- 我真的很想了解 jasperreport 的工作原理,但我是 java 的新手,有什么我可以阅读的教程...?
我会尝试设置JsonQueryExecuterFactory.JSON_INPUT_STREAM parameter instead, as it seems to be exactly what you need. The JsonQueryExecuterFactory.JSON_SOURCE参数只能是:
- 类路径上的资源
- 来自文件系统的文件,具有绝对或相对路径
- 一个url
大多数用于熟悉 JasperReports 的资源都可以在 Jaspersoft Community 网站上找到。 您可能会发现有用的:
- JasperReports Ultimate Guide
- Wiki or the Answers 部分
对于我遇到的问题,我有自己的解决方案,也许有人也需要解决方案。
此代码
params.put(JsonQueryExecuterFactory.JSON_SOURCE, is);
我替换为
params.put(JsonQueryExecuterFactory.JSON_SOURCE, "/path/to/file.json");
或替换为 http 服务器响应
params.put(JsonQueryExecuterFactory.JSON_SOURCE, "htttp://localhost:12345/data.json");