JSP 2.0 사용자 정의 탭
21118 단어 사용자 정의 태그
태그 처리 클래스 의 수명 주기 방법 을 정의 합 니 다.doTag()
--- | Simple TagSupport 클래스
모두 Simple Tag 인 터 페 이 스 를 실현 하 는 방법 이 므 로 다음 에 우 리 는 이 종 류 를 계승 하고 다시 쓰 면 된다.
자신의 if 구현... else 태그
목표:
1 <%@taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
2
3 <c:choose>
4
5 <c:when test="<%= 12>1 %>">
6
7
8
9 </c:when>
10
11 <c:otherwise>
12
13
14
15 </c:otherwise>
16
17 </c:choose>
분석:
1. ChooseTag. java, 태그 필드 속성 을 정의 해 야 합 니 다.
1 public class ChooseTag extends SimpleTagSupport {
2 private boolean tag = true;
3 public boolean isTag() {
4 return tag;
5 }
6 public void setTag(boolean tag) {
7 this.tag = tag;
8 }
9 //
10 public void doTag() throws JspException, IOException {
11 //
12 JspFragment body = this.getJspBody();
13 //
14 body.invoke(null);
15 super.doTag();
16 }
17 }
2. WhenTag.java
1 public class WhenTag extends SimpleTagSupport {
2 private boolean test;
3 public boolean isTest() {
4 return test;
5 }
6 public void setTest(boolean test) {
7 this.test = test;
8 }
9 //
10 public void doTag() throws JspException, IOException {
11 //
12 ChooseTag choose = (ChooseTag)this.getParent();
13 //
14 boolean parent = choose.isTag();
15 //
16 if( parent && this.isTest() ){
17 //
18 choose.setTag(false);
19 //
20 JspFragment body = this.getJspBody();
21 body.invoke(null);
22 }
23 super.doTag();
24 }
25 }
3. Otherwise.java
1 public class OtherwiseTag extends SimpleTagSupport {
2
3 //
4 public void doTag() throws JspException, IOException {
5 //
6 ChooseTag choose = (ChooseTag)this.getParent();
7 //
8 boolean parent = choose.isTag();
9 //
10 if(parent){
11 //
12 JspFragment body = this.getJspBody();
13 body.invoke(null);
14 }
15 super.doTag();
16 }
17 }
4. 설명 파일
1 <?xml version="1.0" encoding="UTF-8"?>
2 <taglib
3 xmlns="http://java.sun.com/xml/ns/javaee"
4 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
5 xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-jsptaglibrary_2_1.xsd"
6 version="2.1">
7 <!-- 2. -->
8 <tlib-version>1.0</tlib-version>
9 <short-name>jnb</short-name>
10 <tag>
11 <name>choose</name>
12 <tag-class>cn.itcast.tags.ChooseTag</tag-class>
13 <body-content>scriptless</body-content> JSP2.0
14 </tag>
15 <tag>
16 <name>when</name>
17 <tag-class>cn.itcast.tags.WhenTag</tag-class>
18 <body-content>scriptless</body-content>
19 <attribute>
20 <name>test</name>
21 <required>true</required>
22 <rtexprvalue>true</rtexprvalue>
23 </attribute>
24 </tag>
25
26 <tag>
27 <name>otherwise</name>
28 <tag-class>cn.itcast.tags.OtherwiseTag</tag-class>
29 <body-content>scriptless</body-content>
30 </tag>
31 </taglib>
5. 도입 과 사용
1 <%@taglib uri="/WEB-INF/ifelse.tld" prefix="jnb"%>
2 <jnb:choose>
3 <jnb:when test="<%= 1>2 %>">
4
5 </jnb:when>
6 <jnb:otherwise>
7
8 </jnb:otherwise>
9 </jnb:choose>
패키지 사용자 정의 탭 라 이브 러 리
tled 파일 에 uri 를 미리 쓰 고 *. jsp 에 www. jnb. com 을 도입 하면 오류 가 발생 합 니 다. uri 는 포장 할 때 사용 합 니 다.
6. jar 명령 으로 포장 하기
D:\mytaglibs>jar cvf jnb.jar *