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

others

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

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

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

補足

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

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

 

コメント

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