根据条件显示图像

时间:2016-02-18 20:08:18

标签: image jasper-reports conditional-statements

下面的代码无效,我收到错误。

<image>
  <reportElement x="42" y="101" width="22" height="23"/>
  <printWhenExpression>($F{booleanConditon} ? <![CDATA[$P{path} + "checkBox.png"]] : <![CDATA[$P{path} + "unCheckBox.png"]]>)</printWhenExpression>
</image>

错误信息是

Error loading the report template:
org.xml.sax.SAXParseException; lineNumber: 730; columnNumber: 22; cvc- complex-type.2.4.a: Invalid content was found starting with element 'printWhenExpression'. One of '{"http://jasperreports.sourceforge.net/jasperreports":box, "http://jasperreports.sourceforge.net/jasperreports":graphicElement, "http://jasperreports.sourceforge.net/jasperreports":imageExpression, "http://jasperreports.sourceforge.net/jasperreports":anchorNameExpression, "http://jasperreports.sourceforge.net/jasperreports":hyperlinkReferenceExpression, "http://jasperreports.sourceforge.net/jasperreports":hyperlinkWhenExpression, "http://jasperreports.sourceforge.net/jasperreports":hyperlinkAnchorExpression, "http://jasperreports.sourceforge.net/jasperreports":hyperlinkPageExpression, "http://jasperreports.sourceforge.net/jasperreports":hyperlinkTooltipExpression, "http://jasperreports.sourceforge.net/jasperreports":hyperlinkParameter}' is expected.

4 个答案:

答案 0 :(得分:1)

使用图像表达,如下所示

示例:

<imageExpression><![CDATA[$V{PAGE_NUMBER}==1 ? "img/watermark_firstpage.png" : "img/watermark_otherpage.png"]]></imageExpression>

答案 1 :(得分:0)

您需要在<![CDATA[..code...]]>内标记表达式的全部,以便xml解析器将其纯粹解释为文本数据,表达式的评估将由jasper报告引擎完成

<printWhenExpression><![CDATA[($F{booleanConditon} ? $P{path} + "checkBox.png" : $P{path} + "unCheckBox.png")]]></printWhenExpression>

因此评估过程,首先解析xml(sax解析器),然后解析你的表达式(jasper报告引擎)

答案 2 :(得分:0)

问题是您的XML无效。 元素printWhenExpression不能是image的直接子元素。它应该是reportElement的孩子。

示例:

<image>
  <reportElement x="42" y="101" width="22" height="23">
    <printWhenExpression>($F{booleanConditon} ? <![CDATA[$P{path} + "checkBox.png"]] : <![CDATA[$P{path} + "unCheckBox.png"]]>)</printWhenExpression>
  </reportElement>
</image>

答案 3 :(得分:0)

我遇到了同样的问题。解决方案如下:你可以拍一张照片 我有两个图像checked.png和unchecked.png。 我已经对数据库进行了查询并获取了字段'checkAsIsFlag'的值。该字段包含'Y'(已选中)或'N'(未选中)作为文本值。如果checkAsIsFlag ='Y',我将显示一个图像checked.png,如果checkAsIsFlag ='N',我将显示unchecked.png。

我将两个图像放在设计页面上一个在另一个上面(像素中的相同位置)。并在“打印表达式”字段中写入表达式,检查参考图像。

简短的源代码如下:

        <image>
            <reportElement x="30" y="7" width="25" height="25" uuid="afe9a678-28a4-40d2-bc61-82b49fb904d9">
                <property name="com.jaspersoft.studio.unit.width" value="pixel"/>
                <property name="com.jaspersoft.studio.unit.height" value="pixel"/>
                <property name="com.jaspersoft.studio.unit.x" value="pixel"/>
                <printWhenExpression><![CDATA[$F{checkasisflag}.equals("Y")]]></printWhenExpression>
            </reportElement>
            <imageExpression><![CDATA["http://localhost:8080/studentreport/images/checked.png"]]></imageExpression>
        </image>

        <image>
            <reportElement x="30" y="7" width="25" height="25" uuid="a993026c-430e-4f56-9531-3baaa0de11f4">
                <property name="com.jaspersoft.studio.unit.width" value="pixel"/>
                <property name="com.jaspersoft.studio.unit.height" value="pixel"/>
                <property name="com.jaspersoft.studio.unit.x" value="pixel"/>
                <property name="com.jaspersoft.studio.unit.y" value="pixel"/>
                <printWhenExpression><![CDATA[$F{checkasisflag}.equals("N")]]></printWhenExpression>
            </reportElement>
            <imageExpression><![CDATA["http://localhost:8080/studentreport/images/unchecked.png"]]></imageExpression>
        </image>

Reference Image Eclipse IDE Jasper Report Tool