我知道,但我们确实需要它。 我们分工明确。 它们创建模板,我根据一些规则在运行时填充它们。
$ P {risk_types} .get($ F {risk_type})吗?:“未定义”
SO: 在运行时需要替换参数的内容(也是默认值)。 例: 需要设置JSON_INPUT_STREAM
就像这个未解决的线程。 https://community.jaspersoft.com/questions/516611/changing-parameter-scriptlet 确实希望不要在xml级别上工作,但是就我所尝试的而言,xml也无法解决我的问题。 谢谢!
答案 0 :(得分:0)
我们这样做的最简单,最干净的方法(绕过使用大量不推荐使用的文档和未完成的有问题的未文档化静态反模式新功能):
使用存储库扩展名创建上下文
SimpleJasperReportsContext jasperReportsContext = new SimpleJasperReportsContext();
jasperReportsContext.setExtensions(RepositoryService.class, Collections.singletonList(new MyRepositoryService(jasperReportsContext, yourOptionalParams)));
以这种方式填充(在编译和其他常规操作之后)
JasperPrint print = JasperFillManager.getInstance(jasperReportsContext).fill(compiled, new HashMap<>());
现在,您的存储库必须扩展默认存储库才能成功注入(由于hodgie编码为“ isAssignableFrom”)
public class PrintFormsRepositoryService extends DefaultRepositoryService {
@Override
public InputStream getInputStream(RepositoryContext context, String uri) {
// return here your own good simple poj inputStream even from memory if you found source
// or pass to another repository service(default one probably)
return null;
}
}