JasperReports 3.7.1 版(DynamicJasper 3.1.9 版支持)仅支持文本字段表达式的此类:
- java.lang.Boolean
- java.lang.Byte
- java.util.Date
- java.sql.Timestamp
- java.sql.Time
- java.lang.Double
- java.lang.Float
- java.lang.Integer
- java.lang.Long
- java.lang.Short
- java.math.BigDecimal
- java.lang.Number
- java.lang.String
您可以通过查看net.sf.jasperreports.engine.design.JRVerifier 类的此方法的源代码来确定这一事实:
private static synchronized String[] getTextFieldClassNames()
{
if (textFieldClassNames == null)
{
textFieldClassNames = new String[]
{
java.lang.Boolean.class.getName(),
java.lang.Byte.class.getName(),
java.util.Date.class.getName(),
java.sql.Timestamp.class.getName(),
java.sql.Time.class.getName(),
java.lang.Double.class.getName(),
java.lang.Float.class.getName(),
java.lang.Integer.class.getName(),
java.lang.Long.class.getName(),
java.lang.Short.class.getName(),
java.math.BigDecimal.class.getName(),
java.lang.Number.class.getName(),
java.lang.String.class.getName()
};
Arrays.sort(textFieldClassNames);
}
return textFieldClassNames;
}
private void verifyTextField(JRTextField textField)
{
verifyReportElement(textField);
verifyFont(textField);
verifyAnchor(textField);
verifyHyperlink(textField);
if (textField != null)
{
JRExpression expression = textField.getExpression();
if (expression != null)
{
try
{
String className = expression.getValueClassName();
if (className == null)
{
addBrokenRule("Class not set for text field expression.", expression);
}
else if (Arrays.binarySearch(getTextFieldClassNames(), className) < 0)
{
addBrokenRule("Class \"" + className + "\" not supported for text field expression.", expression);
}
}
catch (JRRuntimeException e)
{
addBrokenRule(e, expression);
}
}
}
}
如您所见,verifyTextField 方法会在您的情况下生成此消息。
完整的堆栈跟踪:
- 文本字段表达式不支持“org.joda.time.LocalDate”类。 net.sf.jasperreports.engine.design.JRValidationException:
报告设计无效:
- 文本字段表达式不支持“org.joda.time.LocalDate”类。在
net.sf.jasperreports.engine.design.JRAbstractCompiler.verifyDesign(JRAbstractCompiler.java:258)
在
net.sf.jasperreports.engine.design.JRAbstractCompiler.compileReport(JRAbstractCompiler.java:140)
在
net.sf.jasperreports.engine.JasperCompileManager.compileReport(JasperCompileManager.java:215)
在
ar.com.fdvs.dj.core.DynamicJasperHelper.generateJasperReport(DynamicJasperHelper.java:542)
在
ar.com.fdvs.dj.core.DynamicJasperHelper.generateJasperReport(DynamicJasperHelper.java:518)
在
ar.com.fdvs.dj.core.DynamicJasperHelper.generateJRXML(DynamicJasperHelper.java:403)
我认为你应该尝试使用 scriptlet。这是sample。