2005年7月22日

カスタムタグで<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>

Posted by anigon at 10:56 PM

「弱点こそが改善の鍵。」へ戻る | 「久々に強い地震でしたねぇ。」へ進む

上へ戻る