frei

旧「anney's room」からブログ「frei」だけ引っ越し&残しました

カスタムタグで<br />。

そんな訳で。

昨日JSPのカスタムタグを試しに作ってみた。

欲しかったのは、改行コードを含んだ文字列を与えると

HTMLの<br />タグに変換して表示するだけのもの。

めちゃ適当なので、動きはしたけど

本当にこんなんでいいのか?とか思ったり(笑)

とりあえず、完成したのは、こんな↓感じ。

タグ・ハンドラクラス

Nl2br.java

package customTag;

import java.io.IOException;

import javax.servlet.jsp.JspException;

import javax.servlet.jsp.JspWriter;

import javax.servlet.jsp.PageContext;

import javax.servlet.jsp.tagext.BodyContent;

import javax.servlet.jsp.tagext.BodyTag;

import javax.servlet.jsp.tagext.Tag;

public class Nl2br implements BodyTag {

private BodyContent bodyContent;

public void setPageContext(PageContext pageContext) {}

public void setParent(Tag arg0) {}

public int doStartTag() throws JspException {

return EVAL_BODY_BUFFERED;

}

public void setBodyContent(BodyContent bodyContent) {

this.bodyContent = bodyContent;

}

public void doInitBody() throws JspException {}

public int doAfterBody() throws JspException {

try {

JspWriter jspWrite = bodyContent.getEnclosingWriter();

String convertString = bodyContent.getString();

jspWrite.print(convertString.replaceAll("\r\n|\n","<br />\n"));

} catch (IOException e) {

throw new JspException(e.getMessage());

}

return SKIP_BODY;

}

public int doEndTag() throws JspException {

return EVAL_PAGE;

}

public void release() {}

public Tag getParent() {

return null;

}

}

タグ設定ファイル

customTag.tld

<?xml version="1.0" encoding="Shift_JIS" ?>

<!DOCTYPE taglib PUBLIC "-//Sun Microsystems, Inc.//DTD JSP Tag Library 1.1//EN"

"http://java.sun.com/j2ee/dtds/web-jsptaglibrary_1_1.dtd">

<taglib>

<tlibversion>1.0</tlibversion>

<jspversion>1.1</jspversion>

<shortname>original tag</shortname>

<tag>

<name>nl2br</name>

<tagclass>customTag.Nl2br</tagclass>

<bodycontent>JSP</bodycontent>

<info>改行コードをHTML改行タグに変換して表示</info>

</tag>

</taglib>

JSPファイル

customTagTest.jsp

<%@ page contentType="text/html;charset=Windows-31J" %>

<%@ taglib uri="customTag.tld" prefix="ct" %>

<html>

<body>

<ct:nl2br>

ここに書いた内容は

ちゃんと改行コードが

変換されて表示されるんですよ。

</ct:nl2br>

</body>

</html>