символ ':' в выводе HTML JasperReports - PullRequest
3 голосов
/ 19 декабря 2011

Я работаю с JasperReports с HTML в качестве формата экспорта.Проблема в том, что из моего Java-класса я устанавливаю параметр со значением String, содержащим символ «:», когда я нажимаю кнопку, чтобы создать отчет, поле, содержащее символ «:», меняет егопозиционировать и показывать где-то еще, если я уберу ':', все будет работать нормально.

Некоторые входные данные

  1. Мой jrxml имеет кодировку UTF-8
  2. Я попытался заменить ':' на '\u003a', но безуспешно
  3. Я попытался заменить ':' на ':', это дает мне ':', но не ': '
  4. jrxml - это что-то вроде этого, здесь значение' leftTime 'имеет значение с символом': ', и поэтому оно не отображается в таблице, а отображается где-то еще на экране (с другимзначения x и y).
<detail>
    <band height="15">
        <textField isStretchWithOverflow="true" isBlankWhenNull="true">
            <reportElement x="600" y="0" width="120" height="15"/>
            <textElement textAlignment="Left"/>
            <textFieldExpression><![CDATA[$F{supervisorName}]]>
            </textFieldExpression>
        </textField>
        <textField isStretchWithOverflow="true" isBlankWhenNull="true">
            <reportElement x="532" y="0" width="65" height="15"/>
            <textElement textAlignment="Left"/>
            <textFieldExpression><![CDATA[$F{leaveTime}]]>
            </textFieldExpression>
        </textField>
    </band>
</detail>

1 Ответ

1 голос
/ 19 декабря 2011

Основная идея такова: JasperReports помещает в отчет любое значение, которое у вас есть для $ F {leftTime}. Это может включать символы, которые не являются HTML-дружественными. Это разумно, поскольку JR не знает, будете ли вы экспортировать в Excel, PDF, HTML или что-то еще. Ваша идея заменить ':' на '\u003a' концептуально верна ... но не совсем в деталях. Вам нужен экранирование HTML, а не экранирование UTF-8.

Я думаю, что в этом конкретном случае вам нужно &#58;.

В более общем случае вам следует использовать библиотеку, созданную для экранирования строк HTML. Я рекомендую использовать Apache Commons Lang. Таким образом, вы можете заменить $F{leaveTime} на StringEscapeUtils.escapeHtml($F{leaveTime}).

...