在我的jasper報告中,我有過濾器輸入參數叫做名字,姓氏。使用ireport,如果最終用戶輸入名字或姓氏,如何在我的報告中顯示這些參數。在jasper報告中顯示輸入參數?
在我的報告中,我想顯示以下使用參數。
篩選:姓莊的 姓 - 保羅
如果輸入這些參數都沒有,沒有人會被顯示。
我希望你們能幫助我。
在我的jasper報告中,我有過濾器輸入參數叫做名字,姓氏。使用ireport,如果最終用戶輸入名字或姓氏,如何在我的報告中顯示這些參數。在jasper報告中顯示輸入參數?
在我的報告中,我想顯示以下使用參數。
篩選:姓莊的 姓 - 保羅
如果輸入這些參數都沒有,沒有人會被顯示。
我希望你們能幫助我。
我開發此功能的一種方法是通過讀取.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);
要在報告中顯示的參數值,只需將一個「歸檔文本」並只分配參數。
如果你想默認顯示「All」而不選擇任何參數,那麼你可以使用這個條件。
$P{p_firstname} == null? " All " :
(
$P{p_firstname}.isEmpty() ? " All ":
$P{p_firstname}
)