【Thymeleaf】文字列の改行コードを<br />に変換して出力する

others

 Thymeleafを使って、Modelに登録されたフィールドを文字列として画面出力することは多くあります。その際、よく必要となるのは改行コードを <br /> に変換して、出力する処理。

Modelのコード
<span class="fz-14px">//エラーリストからエラーを取り出して、各エラー文言の区切りとして、「\\n」をつける。</span>
<span class="fz-16px">for (messageDetail err: errorList.getMessages()){
    errorMsg.append(err.getDetail());
    errorMsg.append("\\n");
}
***Form.setErrMsg(errorMsg.toString());</span>
元のコード
<span class="fz-16px"><span th:utext="*{errMsg}" ></span></span> <span class="fz-14px"> <span class="bold-red"><!--当たり前ですが、改行されない--></span></span>
修正したコード
<span class="fz-14px"><span>
    <th:block th:if="*{errMsg != null}">
        <th:block th:each="line: *{errMsg.split('\\r\\n|\\r|\\n', -1)}"><span class="blue"><!-- 改行コードで</span></span>
<span class="fz-14px"><span class="blue">分割</span></span>
<span class="fz-14px"><span class="blue">してループ --></span>
            <th:block th:text="${line}" /><br />
        </th:block>
    </th:block>
</span></span>

 少し面倒くさいですが、改行コードでsplitして配列化したものをループさせて、各行の末尾に
をつけることです。

補足

 Modelに登録する際、改行コードを「errorMsg.append(“
“);
」に指定すれば、th:utextを利用する方法もありますが、文字列自体がエスケープされなくなってしまうため、XSSの危険があります。

<span class="fz-14px"><span th:utext="*{errMsg}" ></span></span> <span class="fz-14px"><!--errMsgの改行コードは<br />なら、改行される--></span>

 

コメント

タイトルとURLをコピーしました