iReport+jasperReport之scriptlet(续)

上篇iReport+jasperReport之scriptlet时遗漏了一个问题,getParameterValue、setParameterValue方法可以操作Parameter,Field/Variable该怎么set呢?
    看看 JRAbstractScriptlet.java类的这个方法:
public   void  setData(
        Map parsm,
        Map fldsm,
        Map varsm,
        JRFillGroup[] grps
        )
    
{
        parametersMap 
= parsm;
        fieldsMap 
= fldsm;
        variablesMap 
= varsm;
        groups 
= grps;
    }
        似乎有点意思,我们可以通过这个方法把我们期望的数据组装成Map然后set进去,可是要只针对个别字段怎么处理呢,调用此方法似乎不太合常理,仔细查看API却没有实际能调用的API吧!这个似乎不太合乎,仔细看看确实没有调用的,至少目前我还是没有发现,怎么办 自己写吧!
    设置Field方法:
public   void  setFieldValue(String fieldName, Object value)  throws  JRScriptletException
    
{
        JRFillField field 
= (JRFillField)this.fieldsMap.get(fieldName);
        
if (field == null)
        
{
            
throw new JRScriptletException("FieldName not found : " + fieldName);
        }

        
        field.setValue(value);
    }
    设置Variable方法:
public   void  setVariableValue(String variableName, Object value)  throws  JRScriptletException
    
{
        JRFillVariable variable 
= (JRFillVariable)this.variablesMap.get(variableName);
        
if (variable == null)
        
{
            
throw new JRScriptletException("Variable not found : " + variableName);
        }

        
        
if (value != null && !variable.getValueClass().isInstance(value) )
        
{
            
throw new JRScriptletException("Incompatible value assigned to variable " + variableName + ". Expected " + variable.getValueClassName() + ".");
        }

        
        variable.setValue(value);
    }
    OK!这样我们就可以针对报表上的每一个字段处理了,测试通过 代码就不贴了哦,写上篇的时候忘记这两个方法是我自己加的,查看API时才发现所以来了个续

你可能感兴趣的:(jasperReport)