Jasper 字符串函数方法未定义错误

Jasper string functions method undefined error

使用 Jasper Reports 5.6.1。向以前工作的文本字段 jrxml 添加了一些文本函数(只是想在超过 75 个字符时截断)。适用于 iReport Studio,但不适用于 Java。

<textFieldExpression><![CDATA[IF(LEN($F{AccountName})<75,$F{AccountName},LEFT($F{AccountName},75)+"...")]]></textFieldExpression>

错误信息:

Error occured while trying to fetch the HTML Output from the Jasper     Service (Errors were encountered when compiling report expressions class file:
1. The method LEN(String) is undefined for the type ICC_1422636250096_198427
            value = IF(LEN(((java.lang.String)field_AccountName.getValue()))<75,((java.lang.String)field_AccountName.getValue()),LEFT(((java.lang.String)field_AccountName.getValue()),75)+"..."); //$JR_EXPR_ID=9$
                       <->
2. The method LEFT(String, int) is undefined for the type ICC_1422636250096_198427
            value = IF(LEN(((java.lang.String)field_AccountName.getValue()))<75,((java.lang.String)field_AccountName.getValue()),LEFT(((java.lang.String)field_AccountName.getValue()),75)+"..."); //$JR_EXPR_ID=9$
                                                                                                                                 <-->
3. The method LEN(String) is undefined for the type ICC_1422636250096_198427
            value = IF(LEN(((java.lang.String)field_AccountName.getOldValue()))<75,((java.lang.String)field_AccountName.getOldValue()),LEFT(((java.lang.String)field_AccountName.getOldValue()),75)+"..."); //$JR_EXPR_ID=9$
                       <->
4. The method LEFT(String, int) is undefined for the type ICC_1422636250096_198427
            value = IF(LEN(((java.lang.String)field_AccountName.getOldValue()))<75,((java.lang.String)field_AccountName.getOldValue()),LEFT(((java.lang.String)field_AccountName.getOldValue()),75)+"..."); //$JR_EXPR_ID=9$
                                                                                                                                       <-->
5. The method LEN(String) is undefined for the type ICC_1422636250096_198427
            value = IF(LEN(((java.lang.String)field_AccountName.getValue()))<75,((java.lang.String)field_AccountName.getValue()),LEFT(((java.lang.String)field_AccountName.getValue()),75)+"..."); //$JR_EXPR_ID=9$
                       <->
6. The method LEFT(String, int) is undefined for the type ICC_1422636250096_198427
            value = IF(LEN(((java.lang.String)field_AccountName.getValue()))<75,((java.lang.String)field_AccountName.getValue()),LEFT(((java.lang.String)field_AccountName.getValue()),75)+"..."); //$JR_EXPR_ID=9$
                                                                                                                                 <-->
6 errors
)

我检查了 jasperreports-5.6.1.jar 文件中的包,包括函数包。详尽的网络搜索一无所获。可能是什么?

我有类似的错误信息。你在哪里可以解决这个问题?在 Jaspersoft Studio 6.0.1 中工作正常,但在使用 Java:

编译时会抛出此错误

未定义方法 IF(boolean, BigDecimal, BigDecimal) Blank_A4_1_1423164610392_674232

更新:我能够通过在我的类路径中包含函数 jar 来解决这个问题。看看这是否适合你。请参阅 jasperreports-functions-5.6.1.jar 在 http://sourceforge.net/projects/jasperreports/files/jasperreports/JasperReports%205.6.1/

使用 GlassFish 时,请验证您的生产服务器上是否拥有所有 jasper 库。它们应该在 glassfish/domains/domain1/lib/ext 之下。如果罐子不存在(或其中一些,例如字体或其他一些非必需的库),您可能会遇到您描述的行为。