谁能告诉我为什么不推荐使用的setValueClass
方法JRDesignExpression
?有没有其他我可以使用的方法?
4 回答
它已被弃用,因为该字段valueClass
已从其超类中弃用。JRBaseExpression
该字段已被删除,因此他们不再需要该字段的 set 方法。在任何网站上都没有解释原因。有人在 jaspersoft 论坛上提问,他们得到的回答是“因为不再需要它”。
表达式值类属性被用作表达式预期类型。它的工作方式因报告表达语言而异。如果表达式未计算为与表达式类型兼容的值(如 instanceof),则 Java 报告失败,而 Groovy 报告使用 Groovy 强制转换/转换来尝试将计算值转换为预期类型。
对于 Java 报告,指定表达式值类是相当重复的(例如,如果您有一个显示整数值的文本字段,则需要将文本字段表达式类设置为整数或数字)。另一方面,Groovy 演员表在某些情况下会产生一些意想不到的后果。
因此,表达式的值类属性已被弃用,因为删除了设置它的需要。评估表达式的所有代码不再需要提前知道预期的类型,表达式被评估并且调用者在运行时决定如何根据其类型处理表达式的结果。
这意味着在大多数情况下,应该简单地删除对 setValueClass 的调用。只有当您依赖 Groovy 类型转换将计算值转换为其他类型时,您才需要在表达式本身中包含类型转换。
没有给出为什么它在API中被贬值的原因。同样遗憾的是,没有列出可以替代它的其他方法。
请在下面的链接中查看 JasperSoft 社区论坛中提出的相同问题...
我知道了。如果你打开一个 JRXml 文件,它就会变得很明显。您为字段设置的类型/类未在表达式标记中定义
<textFieldExpression><![CDATA[$F{myVar}]]></textFieldExpression>
但在现场:
<field name="myVar" class="java.lang.String"/>
所以现在你可以通过使用 的方法来设置setValueClass
类型JRDesignField
。
例如,您创建字段并为其指定类型:
JRDesignField field = myCreateField();
field.setValueClass(java.lang.String.class);