在我的jasper报告中,我有一个名为first name,last name的过滤器输入参数。使用ireport,如果最终用户输入名字或姓氏,我如何在报告中显示这些参数。
在我的报告中,我想显示以下使用参数。
过滤条件:名字-John 姓氏 - 保罗
如果没有输入这些参数,则不会显示任何参数。
我希望你们能在这里帮助我。
答案 0 :(得分:0)
我开发此功能的一种方法是读取.jasper文件(编译报告)中指定的参数。这样做的代码是:
JasperReport template = null;
try {
template = (JasperReport)JRLoader.loadObject(fs);
_logger.fine(putUsernameInsideLogger()+"JasperReport file " + template);
} catch (JRException e) {
_logger.severe(putUsernameInsideLogger()+"Error during object loading (.jasper file loading) inside insert() method - ReportBean ",e);
}
JRParameter[] params = template.getParameters();
int counter = 1;
for(JRParameter param : params) {
System.out.println("PARAMETER nr "+counter++);
if(!param.isSystemDefined() && param.isForPrompting()){
System.out.println("Name: "+param.getName()+ " ,\\nDesc: "+param.getDescription()+" ,\\nDefaultValueExpr: "+param.getDefaultValueExpression()+" ,\\nNestedTypeName: "+param.getNestedTypeName()+ " ,\\nValueClassName: "+param.getValueClassName()+" , \\nNestedType: "+param.getNestedType());
if (param.getValueClassName().equalsIgnoreCase("java.lang.String")){
//expose a ui component bind }
if (param.getValueClassName().equalsIgnoreCase("java.util.Date")){
//same as above}
if (param.getValueClassName().equalsIgnoreCase("java.lang.Integer")){
//my example
RichInputNumberSpinbox ui = new RichInputNumberSpinbox();
ui.setId("rit"+counter);
ui.setLabel(param.getName());
reportFieldsGroupLayout.getChildren().add(ui);}
}
}
通过这种方式,您将能够获取报告中指定的参数,并创建暴露给用户界面的UI组件。之后,请记住在报告生成时读取插入到这些组件的值,并将它们插入Map
并将其传递给导出器:
Map parameters = new HashMap();
parameters.put("title", uiComponent.getValue()); //get the value from your ui component
JasperPrint print = null;
print = JasperFillManager.fillReport(template, parameters, conn);
答案 1 :(得分:-1)
要在报告中显示参数值,只需拖动“文本归档”并仅指定参数。
如果您希望默认显示“全部”而不选择任何参数,则可以使用此条件。
$P{p_firstname} == null? " All " :
(
$P{p_firstname}.isEmpty() ? " All ":
$P{p_firstname}
)