变量的值显示为null而不是格式化日期

时间:2017-02-18 16:35:03

标签: jasper-reports

您好我在显示此格式"01-Nov-16"的字符串日期时遇到问题,因为"01-11-2016" null是返回的内容。我试过我所知道的一切。下面是我的确切xml。

<variable name="S_DATE" class="java.util.Date">
    <variableExpression><![CDATA[new java.text.SimpleDateFormat("dd-MMM-yy",java.util.Locale.US).parse($P{startdate})]]></variableExpression>
</variable>

<textField isStretchWithOverflow="true" pattern="dd-MM-yyyy" isBlankWhenNull="false">
    <reportElement stretchType="RelativeToTallestObject" x="205" y="0" width="102" height="20" isRemoveLineWhenBlank="true" isPrintWhenDetailOverflows="true" forecolor="#000000" uuid="560349d8-0bb8-44f0-90ce-41ffb71544cc"/>
    <textElement textAlignment="Left">
        <font size="10"/>
    </textElement>
    <textFieldExpression><![CDATA[$V{S_DATE}]]></textFieldExpression>
</textField>

startdate参数的类型为String

1 个答案:

答案 0 :(得分:0)

第一种方法

尝试使用参数而不是变量。在这种情况下,无需使用“权力”和变量的特征。

示例

<jasperReport xmlns="http://jasperreports.sourceforge.net/jasperreports" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://jasperreports.sourceforge.net/jasperreports http://jasperreports.sourceforge.net/xsd/jasperreport.xsd" name="Format date" pageWidth="595" pageHeight="842" whenNoDataType="AllSectionsNoDetail" columnWidth="555" leftMargin="20" rightMargin="20" topMargin="20" bottomMargin="20">
    <property name="com.jaspersoft.studio.data.defaultdataadapter" value="One Empty Record"/>
    <parameter name="dateAsString" class="java.lang.String">
        <defaultValueExpression><![CDATA["01-Nov-2016"]]></defaultValueExpression>
    </parameter>
    <parameter name="dateParam" class="java.util.Date">
        <defaultValueExpression><![CDATA[new SimpleDateFormat("dd-MMM-yy", Locale.US).parse($P{dateAsString})]]></defaultValueExpression>
    </parameter>
    <title>
        <band height="79" splitType="Stretch">
            <textField pattern="dd-MM-yyyy">
                <reportElement x="130" y="20" width="250" height="30"/>
                <textFieldExpression><![CDATA[$P{dateParam}]]></textFieldExpression>
            </textField>
        </band>
    </title>
</jasperReport>

输出结果

Jaspersoft Studio 的结果将是:

enter image description here

第二种方法

更改变量的resetType。您案例的有效类型为 。正确的表达方式是:

<variable name="S_DATE" class="java.util.Date" resetType="None">
    <variableExpression><![CDATA[new SimpleDateFormat("dd-MMM-yy", Locale.US).parse($P{startdate})]]></variableExpression>
</variable>