タグライブラリの作成方法
■用意するファイル
(例)Webアプリケーション名=springApp
1. tldファイルを用意
/springApp/WebContent/WEB-INF/apptaglib.tld
2. タグハンドラーJavaクラスを作成
spring.app.tag.BeanHiddenTagHandler.java
3. JSPから呼び出す
■詳細
1. tldファイル(/WEB-INF/apptaglib.tld)
<?xml version="1.0" encoding="UTF-8"?>
<taglib version="2.1"
xmlns="http://java.sun.com/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-jsptaglibrary_2_1.xsd">
<tlib-version>1.0</tlib-version>
<!-- タグライブラリの名称とtldファイルの紐づけ -->
<short-name>apptaglib</short-name>
<uri>/WEB-INF/apptaglib</uri>
<!-- タグの定義 -->
<tag>
<!-- タグの名前 -->
<name>SampleTag</name>
<!-- タグハンドラクラス -->
<tag-class>spring.app.tag.BeanHiddenTagHandler</tag-class>
<!-- bodyを持つかどうか -->
<body-content>empty</body-content>
<!-- 属性の定義。attributeを複数並べられる。 -->
<attribute>
<!-- 属性名 -->
<name>beanName</name>
<!-- 必須属性かどうか -->
<required>true</required>
<!-- 実行時評価属性かどうか -->
<rtexprvalue>true</rtexprvalue>
<!-- 属性の型 -->
<type>java.lang.String</type>
</attribute>
</tag>
</taglib>
2. タグハンドラーJavaクラス
・属性が必要な場合はsetterが必要
・スコープからオブジェクト取得する場合、pageContext.findAttribute("属性名");で取得可能
spring.app.tag.BeanHiddenTagHandler.java
package spring.app.tag;
import java.io.IOException;
import javax.servlet.jsp.JspException;
import javax.servlet.jsp.tagext.TagSupport;
public class BeanHiddenTagHandler extends TagSupport {
/** Beanが格納されている属性名 */
private String beanName = "";
/**
* @param beanName セットする beanName
*/
public void setBeanName(String beanName) {
this.beanName = beanName;
}
@Override
public int doEndTag() throws JspException {
// 出力
try {
pageContext.getOut().print("タグに設定した入力値=" + beanName);
} catch (IOException e) {
e.printStackTrace();
}
// 残りのページを評価する値を返して終了
return EVAL_PAGE;
}
}
3. JSP
TLDファイルの読み込みと、呼び出し。
<%@taglib prefix="app" uri="/WEB-INF/apptaglib" %>
(例)Webアプリケーション名=springApp
1. tldファイルを用意
/springApp/WebContent/WEB-INF/apptaglib.tld
2. タグハンドラーJavaクラスを作成
spring.app.tag.BeanHiddenTagHandler.java
3. JSPから呼び出す
■詳細
1. tldファイル(/WEB-INF/apptaglib.tld)
<?xml version="1.0" encoding="UTF-8"?>
<taglib version="2.1"
xmlns="http://java.sun.com/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-jsptaglibrary_2_1.xsd">
<tlib-version>1.0</tlib-version>
<!-- タグライブラリの名称とtldファイルの紐づけ -->
<short-name>apptaglib</short-name>
<uri>/WEB-INF/apptaglib</uri>
<!-- タグの定義 -->
<tag>
<!-- タグの名前 -->
<name>SampleTag</name>
<!-- タグハンドラクラス -->
<tag-class>spring.app.tag.BeanHiddenTagHandler</tag-class>
<!-- bodyを持つかどうか -->
<body-content>empty</body-content>
<!-- 属性の定義。attributeを複数並べられる。 -->
<attribute>
<!-- 属性名 -->
<name>beanName</name>
<!-- 必須属性かどうか -->
<required>true</required>
<!-- 実行時評価属性かどうか -->
<rtexprvalue>true</rtexprvalue>
<!-- 属性の型 -->
<type>java.lang.String</type>
</attribute>
</tag>
</taglib>
2. タグハンドラーJavaクラス
・属性が必要な場合はsetterが必要
・スコープからオブジェクト取得する場合、pageContext.findAttribute("属性名");で取得可能
spring.app.tag.BeanHiddenTagHandler.java
package spring.app.tag;
import java.io.IOException;
import javax.servlet.jsp.JspException;
import javax.servlet.jsp.tagext.TagSupport;
public class BeanHiddenTagHandler extends TagSupport {
/** Beanが格納されている属性名 */
private String beanName = "";
/**
* @param beanName セットする beanName
*/
public void setBeanName(String beanName) {
this.beanName = beanName;
}
@Override
public int doEndTag() throws JspException {
// 出力
try {
pageContext.getOut().print("タグに設定した入力値=" + beanName);
} catch (IOException e) {
e.printStackTrace();
}
// 残りのページを評価する値を返して終了
return EVAL_PAGE;
}
}
3. JSP
TLDファイルの読み込みと、呼び出し。
<%@taglib prefix="app" uri="/WEB-INF/apptaglib" %>
2018-09-20 07:41
nice!(1)
コメント(0)
コメント 0