今日の役に立たない一言 - Today’s Trifle! -

古い記事ではさまざまなテーマを書いていますが、2007年以降はプログラミング関連の話がほとんどです。

JSTLで改行でのsplit()ができない問題

JSPの中でオブジェクト内の文字列を取得して、改行コードでsplit()してやろうと思ったら、JSPコンパイルエラーになって動かない。

<%@taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions" %>
<%@taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>

<c:forEach var="s" items="${fn:split(hoge.text, '\n')}">
    <div>${s}</div>
</c:forEach>

ぐぐってみたら信じられないような解決方法だったり。

JSTLのfn:replaceで改行を置換したい - こせきの技術日記 - 技術日記

たしかにこう書けば期待通りに動くんだけど。。。

<%@taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions" %>
<%@taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>

<c:forEach var="s" items="${fn:split(hoge.text, '
')}">
    <div>${s}</div>
</c:forEach>

あまりに気に入らないから、エンティティにメソッド追加した。

public class Hoge {
    // あーだこーだ

    // 普通のgetter
    public String getText() {
        return text;
    }

    // 追加したメソッド
    public String[] getSplitedText() {
        return text.split("\n");
    }
}

JSPでは追加したメソッドからString配列を取得する。

<%@taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions" %>
<%@taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>

<c:forEach var="s" items="${hoge.splitedText}">
    <div>${s}</div>
</c:forEach>