在jsp页面使用此自定义标签新葡京32450网址:,就上面的两个基本要素就已经构成了完整的分页标签

发布时间:2020-01-20  栏目:新葡京32450网址  评论:0 Comments

    private int titleLength = 10;
    
    public void setImgnum(int imgnum) {
        this.imgnum = imgnum;
    }

JSP自定义标签

JSP自定义标签

 

意气风发、为何须求自定义标签

    1卡塔尔(قطر‎与JSP页面全体统生机勃勃

    2)还具有自然的事情逻辑作用,比方:循环、判定等

 

二、自定标签开拓步骤

    大器晚成】第一步:写二个自定义的竹签处理类

 

复制代码

    public class Demo implements SimpleTag{

            private PageContext pageContext;

            //PageContext是JspContext的子类

            @Override

            public void setJspContext(JspContext jspContext) {

                System.out.println(“Do setJspContext”);

                //获得jsp页面临象

                pageContext = (PageContext) jspContext;

            }

 

            @Override

            public void doTag() throws JspException, IOException {

                System.out.println(“Do doTag”);

                //取得HttpServletRequest对象

                HttpServletRequest request= (HttpServletRequest)
pageContext.getRequest();

                //得到ip地址

                String ip = request.getRemoteAddr();

                System.out.println(ip);

                //取得out <—> JspWriter对象

                JspWriter out = pageContext.getOut();

                //向浏览器输出IP地址音讯

                out.write(“<font size=’30px’ color=’red’>” + “ip:”

  • ip + “</font>”);

            }

 

            @Override

            public JspTag getParent() {

                return null;

            }

 

            @Override

            public void setJspBody(JspFragment arg0) {  

            }

 

 

            @Override

            public void setParent(JspTag arg0) {

            }

        }

复制代码

 

 

 

 

   
二】第二步:在/WEB-INF/目录下,写一个.tld文件,目标是让web容器知道自定义标签和标签管理类的附和关系

 

复制代码

       <?xml version=”1.0″ encoding=”UTF-8″ ?>

 

        <taglib xmlns=””

            xmlns:xsi=””

            xsi:schemaLocation=”

            version=”2.0″>

            

          <description>JSTL 1.1 core library</description>

          <display-name>JSTL core</display-name>

          <tlib-version>1.1</tlib-version>

          <short-name>sky</short-name>

          <uri>;

          

          <tag>

            <name>ip</name>

            <tag-class>com.suse.simpletag.Demo</tag-class>

            <body-content>empty</body-content>
<!–empty:此标签为空标签–>

          </tag>

        </taglib>

复制代码

 

 

 

 

 

 

    三】第三步:在JSP页面中,通过<%@taglib%>指令引用标签库

 

      <%@ taglib prefix=”sky”
uri=”;

 

        <sky:ip />

 

 

 

 

 

 

三、标签管理进程

    1)SimpleTag接口中有5个章程,这5个措施容器会在适度的时候采取调用,

    2)当中,doTag(State of Qatar方法极度基本,该办法中封装了该标签的拍卖事务逻辑

    3)项目中平时都会利用SimpleTagSupport类,该类已经对SimpleTag接口完成

 

四、案例:

    后生可畏】调节标签中的内容是还是不是进行( <sky:execute>标签 卡塔尔

        1)推行标签体     :调用invoke(null卡塔尔国方法

        2)不实行标签体   :不调用invoke(null卡塔尔国方法

 

复制代码

    code:

            public class ExecuteTag extends SimpleTagSupport {

                @Override

                public void doTag() throws JspException, IOException {

                    //将此标签内的情节封装成JspFragment对象

                    JspFragment jspFragment = this.getJspBody();

                   
//将标签中的内容进行输出,null表示暗许输出到浏览器中,不然会输出到相应的流中

                    jspFragment.invoke(nullState of Qatar;
//若未有那条语句,那么此标签的内容便不会输出到浏览器页面中

                }

            }

        tag:

             <tag>

                  <name>execute</name>

                 
<tag-class>com.suse.simpletag.ExecuteTag</tag-class>

                  <body-content>scriptless</body-content>  
    <!– //scriptless表示不容许有脚本存在那标签内部 –>

             </tag>

复制代码

 

 

 

 

 

    二】调节标签后的内容是还是不是推行

        方法:抛出 SkipPageException 卓殊。招致标签体后的内容不试行

 

复制代码

    code:

            public class SkipTag extends SimpleTagSupport {

                @Override

                public void doTag() throws JspException, IOException {

                    JspFragment jspFragment = this.getJspBody();

                    jspFragment.invoke(null卡塔尔(قطر‎;                  
 //设置此标签后的剧情不再施行。方法:抛出一个 SkipPageException(卡塔尔国 万分。

                    throw new SkipPageException();

                }

            }

      tag:

              <tag>

                  <name>skip</name>

                 
<tag-class>com.suse.simpletag.SkipTag</tag-class>

                  <body-content>scriptless</body-content>

              </tag>

复制代码

 

 

 

 

 

 

 

    三】将标签体中内容调换来大写

 

复制代码

    public class UpperTag extends SimpleTagSupport {

        @Override

        public void doTag() throws JspException, IOException {

            JspFragment jspFragment = this.getJspBody();

            

            //创制叁个缓冲区,用于存储标签中的内容

            StringWriter writer = new StringWriter();

            jspFragment.invoke(writer);

            

            //将缓冲区中的内容开展管理(小写 –> 大写卡塔尔国

            StringBuffer buffer = writer.getBuffer();

            String upString = buffer.toString().toUpperCase();

            

            //将调换后的从头到尾的经过输出到浏览器中

            JspContext jspContext = this.getJspContext();

            JspWriter out = jspContext.getOut();

            out.write(upString);

        }

复制代码

 

 

 

 

 

 

    四】开垦带属性的标签:

        1)在标签微型机中编辑各样属性对应的setter方法

        2)在TLD文件中描述标签属性

 

复制代码

   code:

        public class ForSkip extends SimpleTagSupport{

            private String var;

            private int begin;

            private int end;

            private int step = 1; //增量默以为1

            

            public void setVar(String var) {

                this.var = var;

            }

            public void setBegin(int begin) {

                this.begin = begin;

            }

            public void setEnd(int end) {

                this.end = end;

            }

            public void setStep(int step) {

                this.step = step;

            }

            

            @Override

            public void doTag() throws JspException, IOException {

                for (int i = this.begin; i <= this.end; i +=
this.step ) {

                    this.getJspContext().setAttribute(this.var, i);

                    this.getJspBody().invoke(null);

                }

            }

        }

 

    tld:

        <tag>

             <name>forskip</name>

           
 <tag-class>com.suse.simpletag.ForSkip</tag-class>

             <body-content>scriptless</body-content>

             <attribute>

                 <name>var</name>

                 <required>true</required>

                 <rtexprvalue>true</rtexprvalue>

             </attribute>

             <attribute>

                 <name>begin</name>

                 <required>true</required>

                 <rtexprvalue>true</rtexprvalue>

             </attribute>

             <attribute>

                 <name>end</name>

                 <required>true</required>

                 <rtexprvalue>true</rtexprvalue>

             </attribute>

             <attribute>

                 <name>step</name>

                 <required>false</required>

                 <rtexprvalue>true</rtexprvalue>

             </attribute>

        </tag>

    jsp:

        <sky:forskip var=”item” begin=”1″ end=”25″ step=”3″>

            ${item}    

        </sky:forskip>

复制代码

 

 

 

 

 

 

    五】开垦带有父标签的自定义标签

        思路:当有些标签是排它施行,那时:

          1卡塔尔国 能够在这里些标签外,嵌入一个父标签,

          2State of Qatar 并在父标签中做三个标记位,推断是否施行过。

 

复制代码

  code:

        //1, <sky:choose> content </sky:choose>

        public class ChooseTag extends SimpleTagSupport {

            private boolean done = false;

 

            public boolean isDone() {

                return done;

            }

            

            public void setDone(boolean done) {

                this.done = done;

            }

 

 

            @Override

            public void doTag() throws JspException, IOException {

                JspFragment jspFragment =  this.getJspBody();

                jspFragment.invoke(null);

            }

            

        }

 

        //2,<sky:while test=”${expr}”> content </sky:while>

        public class WhileTag extends SimpleTagSupport {

            

            private boolean test;

            public void setTest(boolean test) {

                this.test = test;

            }

 

            

            @Override

            public void doTag() throws JspException, IOException {

                //得到父标签后获取是或不是业已做过了

                ChooseTag chooseTag = (ChooseTag) this.getParent();

                boolean done = chooseTag.isDone();

                

                //若无做过,何况表明式创制

                if (!done && test) {

                    this.getJspBody().invoke(null);

                    chooseTag.setDone(true);

                }

            }

        }

 

        //3,<sky:otherwise>content</sky:otherwise>

        public class OtherWiseTag extends SimpleTagSupport {

            @Override

            public void doTag() throws JspException, IOException {

                //获得父类标签对象,获取到Done的情事,举行对应的管理

                ChooseTag chooseTag = (ChooseTag) this.getParent();

                boolean done = chooseTag.isDone();

                if (!done) {

                    this.getJspBody().invoke(null);

                    chooseTag.setDone(true);

                }

            }

        }

 

    tld:

         <tag>

             <name>choose</name>

           
 <tag-class>com.suse.simpletag.ChooseTag</tag-class>

             <body-content>scriptless</body-content>

         </tag>

         <tag>

             <name>while</name>

           
 <tag-class>com.suse.simpletag.WhileTag</tag-class>

             <body-content>scriptless</body-content>

             <attribute>

                 <name>test</name>

                 <required>true</required>

                 <rtexprvalue>true</rtexprvalue>

             </attribute>

         </tag>

        

         <tag>

             <name>otherwise</name>

           
 <tag-class>com.suse.simpletag.OtherWiseTag</tag-class>

             <body-content>scriptless</body-content>

         </tag>

    jsp:

        <%

        pageContext.setAttribute(“age”, 25);

        %>

        <sky:choose>

            <sky:while test=”${age > 16}”>

                你成年了<br />

            </sky:while>

            <sky:otherwise>

                你未成年 <br />

            </sky:otherwise>

        </sky:choose>

复制代码

 

 

 

 

 

 

    六】防盗链

 

复制代码

  code:

         public class Reference extends SimpleTagSupport{

            private String url;

            private String error;

            

            public void setUrl(String url) {

                this.url = url;

            }

            public void setError(String error) {

                this.error = error;

            }

 

 

            @Override

            public void doTag() throws JspException, IOException {

                //获得页面内置对象

                PageContext pageContext = (PageContext)
this.getJspContext();

                HttpServletRequest request = (HttpServletRequest)
pageContext.getRequest();

                HttpServletResponse response = (HttpServletResponse)
pageContext.getResponse();

                

                //获取标签体中的内容并举行拍卖

                JspFragment jspFragment = this.getJspBody();

                String refer = request.getHeader(“referer”);

                System.out.println(refer);

                if (this.url.equals(refer卡塔尔(قطر‎卡塔尔(قطر‎ { //referer头阐明来自于哪里

                    jspFragment.invoke(null);

                } else {

                    try {

                       
request.getRequestDispatcher(this.error).forward(request, response);

                    } catch (ServletException e) {

                        e.printStackTrace();

                    }

                }

                

            }

        }

 

    tld:

       <tag>

               <name>refer</name>

           
 <tag-class>com.suse.simpletag.Reference</tag-class>

             <body-content>scriptless</body-content>

             <attribute>

                 <name>url</name>

                 <required>true</required>

                 <rtexprvalue>true</rtexprvalue>

             </attribute>

             <attribute>

                 <name>error</name>

                 <required>true</required>

                 <rtexprvalue>true</rtexprvalue>

             </attribute>

         </tag>

    jsp:

        <sky:refer error=”/ad.jsp”
url=”;

        <a href=”#”>下载</a>

        </sky:refer>

复制代码

 

 

 

 

 

 

   七】仿写forEach自定义标签

 

复制代码

   code:

        //Foreach自定义标签

        //Connection类族:  <sky:forEach var=”item”
items=”${list}”>${item}</sky:forEach>   <sky:forEach
var=”item” items=”${set}”>${item}</sky:forEach>

        //Map类族:<sky:forEach var=”en” items=”map”>${en.key}
—– ${en.value}</sky:forEach>

 

        public class ForEachTag extends SimpleTagSupport {

            

            /*用二个Collection类来开展转变*/

            private Collection coll;

            

            private Object items;

            private String var;

            public void setItems(Object items) {

               
/*安装coll的值:当为Collection类族时平昔调换,不然保存Set<Entry<K,V>>格局的Connection*/

                if (items instanceof Collection) {

                    coll = (Collection) items;

                } else if(items instanceof Map) {

                    Map map = (Map) items;

                    coll = map.entrySet();

                }

            }

            public void setVar(String var) {

                this.var = var;

            }

            

            

            @Override

            public void doTag() throws JspException, IOException {

                for (Iterator it = coll.iterator(); it.hasNext(); ) {

                    //获得单个对象

                    Object obj = (Object) it.next();

                    

                    //将单个对象归入域对象中

                    PageContext pageContext = (PageContext)
this.getJspContext();

                    pageContext.getRequest().setAttribute(this.var,
obj);

                    

                    //将标签封装的表达式输出到页面中

                    this.getJspBody().invoke(null);

                }

            }

      

 

 

 

      tld:

         <tag>

             <name>forEach</name>

           
 <tag-class>com.suse.simpletag.ForEachTag</tag-class>

             <body-content>scriptless</body-content>

             <attribute>

                 <name>var</name>

                 <required>true</required>

                 <rtexprvalue>true</rtexprvalue>

             </attribute>

             <attribute>

                 <name>items</name>

                 <required>true</required>

                 <rtexprvalue>true</rtexprvalue>

             </attribute>

         </tag>

 

      jsp:

              <%

                List<String> list = new ArrayList<String>();

                list.add(“jack”);

                list.add(“merry”);

                list.add(“berry”);

                list.add(“sky”);

                

                pageContext.setAttribute(“LIST”, list);

                

                Map<String, String> map = new HashMap<String,
String>();

                map.put(“id”, “121010”);

                map.put(“username”, “jack”);

                map.put(“age”, “15”);

                

                pageContext.setAttribute(“MAP”, map);

            %>

            <sky:forEach items=”${LIST}” var=”item”>

                ${item}   

            </sky:forEach>

            <br />

            <sky:forEach items=”${MAP}” var=”en”>

                ${en.key}:${en.value} <br />

            </sky:forEach>

复制代码

 

 

 

 

 

 

 

    八】过滤器(避免恶意JS代码卡塔尔(قطر‎

 

复制代码

  code:

        //<simple:filter>标签管理类

        public class FilterTag extends SimpleTagSupport {

            public void doTag() throws JspException, IOException {

                JspFragment jspFragment = this.getJspBody();

                StringWriter writer = new StringWriter();

                jspFragment.invoke(writer);

                String temp = writer.getBuffer().toString();

                //结果一定是转义后的字符串

                temp = filter(temp);

                PageContext pageContext = (PageContext)
this.getJspContext();

                pageContext.getOut().write(temp);

            }

            public String filter(String message) {

                if (message == null)

                    return (null);

                char content[] = new char[message.length()];

                message.getChars(0, message.length(), content, 0);

                StringBuffer result = new StringBuffer(content.length +
50);

                for (int i = 0; i < content.length; i++) {

                    switch (content[i]) {

                    case ‘<‘:

                        result.append(“<“);

                        break;

                    case ‘>’:

                        result.append(“>”);

                        break;

                    case ‘&’:

                        result.append(“&”);

                        break;

                    case ‘”‘:

                        result.append(“"”);

                        break;

                    default:

                        result.append(content[i]);

                    }

                }

                return (result.toString());

            }

        }

复制代码

JSP自定义标签
大器晚成、为啥须求自定义标签 1State of Qatar与JSP页面全体统风流洒脱2)还持有自然的作业逻辑效用,举个例子:循环、推断等 二、自…

  上面代码应用的配备daoname.properties

 

目标3:使用BodyTagSupport

此目的并不会利用实际例子实行体现,主要是印证为什么,什么状态下须求运用到BodyTag接口或许BodyTagSupport类?

风度翩翩经大家须求在<test>  ….  
</test>之间的标签体的头部和尾巴部分加上一些标记可能是别的管理,日常的拍卖方法是在doStartTag和doEndTag方法中进行,
可是要是是个迭代标签,标签体的每段内容在循环输出时老是都亟待在头顶和尾巴部分加上一些标识,大家运用BodyTagSupport就相当低价了,

 

此接口在doStartTag(卡塔尔方法再次回到值多了二个EVAL_BODY_BUFFERED,它将对宗旨开展计算,并出口到缓冲区(注:此处是缓冲
区并不是一向出口到顾客端,须求大家手动
(this.bodyContent.getEnclosingWriter(卡塔尔(قطر‎.write(this.bodyContent.getString(卡塔尔(قطر‎State of Qatar;)
举办输出客商端的调用,不然主体内容不会开展体现卡塔尔国

 

标签类表达:

有关BodyTagSupport接口的印证

 

新葡京32450网址 1

package com.web.tag;

前提是导入全体须要的jar包:包罗common-dbcp.jar(数据源须求运用卡塔尔(قطر‎,common-dbutils-1.2.jar(数据库CURAV4D操作供给动用,可代表最原始的JDBC操作卡塔尔,junit.jar(测量试验用到卡塔尔(قطر‎以至数据库驱动包

    public LinkTag() {
        // TODO Auto-generated constructor stub
    }
    
    private String href=””;
    
    public String getHref() {
        return href;
    }

对象4:自定义的函数库

1 创制函数库类

 

public class MyFunctions {

    public static String formatMyName(String name) {

       return “your name is ” + name;

    }

    public static int add(int a, int b) {

       return a+b;

    }

}

 

2 在TLD文件中配置 (援用于目的第11中学的tld文件卡塔尔国

<function>

    <name>formatMyName</name>

    <function-class>com.taglib.MyFunctions</function-class>

    <function-signature>java.lang.String
formatMyName(java.lang.String)</function-signature>

 </function>

 

<function>

    <name>add</name>

    <function-class>com.taglib.MyFunctions</function-class>

    <function-signature>java.lang.String add(int, int)</function-signature>

 </function>

 

3 JSP中调用

 

${cc:formatMyName(“wangfei”) }

${cc:add(12, 34) }

public class MyNewsImg extends BodyTagSupport implements Serializable {

 

对象2:自定义三个形似于Asp.Net中的Reapter控件的竹签

效果图:

 

新葡京32450网址 2

在jsp页面使用此自定义标签:

 

<!– 创建供给表现javabean(UserInfo)集合的实例(用于测量检验数据)
–>

<%

    List<UserInfo> users = new ArrayList<UserInfo>();   

    users.add(new UserInfo(“Zhangsan”, 12, “Zhangsan@163.com”));

    users.add(new UserInfo(“Lisi”, 22, “Lisi@sina.com”));

    users.add(new UserInfo(“Wangwu”, 33, “Wangwu@qq.com”));

    pageContext.setAttribute(“users”, users);

%>

 

<!– 给标签绑定数据源  –>

<table width=‘500px’ border=‘1’ align=‘center’>

    <tr>

        <td width=‘20%’>UserName</td>

        <td width=‘20%’>Age</td>

        <td>Email</td>

    </tr>

    <cc:repeater var=“item” items=${pageScope.users }>

        <tr>

            <td>${item.userName }</td>

            <td>${item.age }</td>

            <td>${item.email }</td>

        </tr>

    </cc:repeater>

</table>

 

支付步骤:

 

要完结此控件大家需求落到实处叁个迭代接口,即IterationTag,由于TagSupport雷同达成了此接口,所以大家一连此类

 

1 创设自定义标签类

 

public class Repeater
extends TagSupport {

    private Collection
items;

    private Iterator
it;

    private String var;

 

    @Override

    public int doStartTag() throws JspException {

        if(items == null || items.size() == 0) return
SKIP_BODY;

        it = items.iterator();  

        if(it.hasNext()) {

            pageContext.setAttribute(var, it.next());

        }

        return EVAL_BODY_INCLUDE;

    }

   

    @Override

    public int doAfterBody() throws JspException {

        if(it.hasNext()) {

            pageContext.setAttribute(var, it.next());

            return EVAL_BODY_AGAIN;

        }

        return SKIP_BODY;

    }

   

    @Override

    public int doEndTag() throws JspException {

        return EVAL_PAGE;

    }

   

    public void setItems(Collection items) {

        this.items = items;

    }

   

    public void setVar(String var) {

        this.var = var;

    }

}

 

2在Web-Inf创制标签库描述文件.tdl(Tag Library Description卡塔尔国

由于指标1种风流倜傥度创立了此文件,大家只需追加此标签的布署就可以

 

<tag>

    <name>repeater</name>

    <tag-class>com.mytags.Repeater</tag-class>

    <body-content>jsp</body-content>

    <attribute>

        <name>items</name>

        <required>false</required>

        <rtexprvalue>true</rtexprvalue>

    </attribute>

    <attribute>

        <name>var</name>

        <required>true</required>

        <rtexprvalue>true</rtexprvalue>

    </attribute>

 </tag>

 

3 配置web.xml (目标1中已到位,没有供给修改)

 

4 在须求使用此标签的jsp页面底部引进

<%@ taglib uri=”/mytaglib” prefix=”cc”%>

 

5 使用(参照上边的选取手续)

 

标签类表明:

咱俩用到了迭代接口,以下是容器管理此接口的流水生产线

 

新葡京32450网址 3

 

作为靶子1中的补充:
在doAfterBody(卡塔尔国纵然重返值是EVAL_BODY_AGAIN那么将再也推行此措施

 

    public int doStartTag() throws JspTagException {
        List<BackNewsVO> listnewspic = null;
        String img = “”;
        String url = “”;
        String title = “”;
        BackNewsBean nbean = new
BackNewsBean();
        try {

  1. <span style=”font-size: medium;”><?xml version=”1.0″ encoding=”UTF-8″?>  
  2. <taglib version=”2.0″ xmlns=””  
  3.     xmlns:xsi=””  
  4.     xsi:schemaLocation=” web-jsptaglibrary_2_0.xsd”>  
  5.     <tlib-version>0.9</tlib-version>  
  6.    <!–标签头–>  
  7.     <short-name>w</short-name>  
  8.     <!–以往在页面用taglib征引时的uri属性,那有的的名字能够不管写,只假若切合HTTP网址格局的 –>  
  9.     <uri>;  
  10.       
  11.     <!– 自定义标签的叙述音讯 –>  
  12.     <tag>  
  13.         <!– 标签名 –>  
  14.         <name>pager</name>  
  15.         <!– 对应的价签管理类全节制名 –>  
  16.         <tag-class>com.javacrazyer.web.tag.PagerTag</tag-class>  
  17.         <!– 标签主体的门类 –>  
  18.         <body-content>empty</body-content>  
  19.         <!– 当前页号属性的陈诉消息 –>  
  20.         <attribute>  
  21.             <!– 属性名 –>  
  22.             <name>pageNo</name>  
  23.             <!– 该属性是或不是为须要的 –>  
  24.             <required>true</required>  
  25.             <!– 属性值是或不是可以在JSP运营时代动态发生 –>  
  26.             <rtexprvalue>true</rtexprvalue>  
  27.             <!– 属性的数据类型 –>  
  28.             <type>int</type>  
  29.         </attribute>  
  30.         <!– 总记录数属性的叙说音讯 –>  
  31.         <attribute>  
  32.             <name>recordCount</name>  
  33.             <required>true</required>  
  34.             <rtexprvalue>true</rtexprvalue>  
  35.             <type>int</type>  
  36.         </attribute>  
  37.         <!– 总页数属性的呈报新闻 –>  
  38.         <attribute>  
  39.             <name>pageSize</name>  
  40.             <required>true</required>  
  41.             <rtexprvalue>true</rtexprvalue>  
  42.             <type>int</type>  
  43.         </attribute>  
  44.         <!– 分页标签要跳转的ULacrosseI属性的描述音讯 –>  
  45.         <attribute>  
  46.             <name>url</name>  
  47.             <required>true</required>  
  48.             <rtexprvalue>true</rtexprvalue>  
  49.             <type>java.lang.String</type>  
  50.         </attribute>  
  51.     </tag>  
  52. </taglib></span>  

import javax.servlet.http.HttpServletRequest;
import javax.servlet.jsp.JspException;
import javax.servlet.jsp.JspTagException;
import javax.servlet.jsp.JspWriter;
import javax.servlet.jsp.tagext.BodyTagSupport;
import javax.servlet.jsp.tagext.TagSupport;

指标1:自定义一个用表格展现客商信息的粗略标签

 

效果图:

新葡京32450网址 4

在jsp页面使用此自定义标签:

 

借使我们有四个UserInfo的javabean,那么在JSP页面使用此标签只需调用此标签就能够

 

<!– 创造必要表现UserInfo的实例(用于测验数据) –>

    <%

    UserInfo user = new UserInfo();

    user.setUserName(“Xuwei”);

    user.setAge(33);

    user.setEmail(“test@test.test”);

    pageContext.setAttribute(“userinfo”, user);  

    %>

 

    <!– 给标签设置user属性绑定要显示的UserInfo对象  –>

    <cc:showUserInfo user=${pageScope.userinfo } />

 

付出步骤:

 

简易标签的开辟大家只要完结Tag接口就能够,为了轻便起见能够直接接轨达成了此接口的TagSupport类

 

1 创制自定义标签类

 

public class UserInfoTag extends TagSupport
{

   

    private UserInfo user;

 

    @Override

    public int doStartTag() throws JspException {

        try {

            JspWriter out = this.pageContext.getOut();

            if(user == null) {

                out.println(“No UserInfo Found…”);

                return SKIP_BODY;

            }

            out.println(“<table width=’500px’ border=’1′
align=’center’>”);

            out.println(“<tr>”);

            out.println(“<td width=’20%’>Username:</td>”);

            out.println(“<td>” + user.getUserName() +
“</td>”);

            out.println(“</tr>”);

            out.println(“<tr>”);

            out.println(“<td>Age:</td>”);

            out.println(“<td>” + user.getAge() + “</td>”);

            out.println(“</tr>”);

            out.println(“<tr>”);

            out.println(“<td>Email:</td>”);

            out.println(“<td>” + user.getEmail() + “</td>”);

            out.println(“</tr>”);

            out.println(“</table>”);

        } catch(Exception e) {

            throw new JspException(e.getMessage());

        }

        return SKIP_BODY;

    }

   

    @Override

    public int doEndTag() throws JspException {

        return EVAL_PAGE;

    }

 

    @Override

    public void release() {

        super.release();

        this.user = null;

    }

   

    //getter and setters

    public UserInfo getUser() {

        return user;

    }

    public void setUser(UserInfo user) {

        this.user = user;

    }

}

 

2 在Web-Inf创立标签库描述文件.tdl(Tag Library Description卡塔尔

 

<?xml version=“1.0” encoding=“UTF-8”?>

<taglib version=“2.0” xmlns=“”

 xmlns:xsi=“”

 xsi:schemaLocation=
web-jsptaglibrary_2_0.xsd”
>

<tlib-version>1.0</tlib-version>

<jsp-version>2.0</jsp-version>

<short-name>cc</short-name>

<uri>/mytaglib</uri>

<tag>

    <name>showUserInfo</name>

    <tag-class>com.mytags.UserInfoTag</tag-class>

    <body-content>empty</body-content>

    <attribute>

        <name>user</name>

         <required>false</required>

         <rtexprvalue>true</rtexprvalue>

    </attribute>

 </tag>

</taglib>

 

3 配置web.xml

 

<jsp-config>

    <taglib>

        <taglib-uri>/mytaglib</taglib-uri>

       
<taglib-location>/WEB-INF/mytaglib.tld</taglib-location>

    </taglib>

  </jsp-config>

 

4 在要求使用此标签的jsp页面底部引进

 

<%@ taglib uri=”/mytaglib” prefix=”cc”%>

 

5 使用(参照上边包车型大巴运用手续)

 

此致,一个精简的JSP标签开荒达成

 

标签类表达:

新葡京32450网址 5

大家创设的UserInfoTag类世袭了TagSupport类,而它又达成了Tag接口,Tag接口的生命周期由其所在的容器调整,如下图:

 

setPageContext(卡塔尔将所在jsp页面的pageContext注入进来,目标是为了在前面包车型大巴章程中能够访谈到jsp页面前遭受象的pageContext属性

 

setParent(卡塔尔国       设置此标签的父标签

 

setAttribute(卡塔尔(قطر‎  
将标签中的属性注入到此class的脾性,没有必要本人完结但要提供属性的get与set方法

 

doStartTag(State of Qatar     
在起头标签属性设置后调用,若是回到SKIP_BODY则忽视标签之中的剧情,假使回去EVAL_BODY_INCLUDE则将标签体的内容开展输出

 

doEndTag(State of Qatar        
在停止标签在此以前调用,重返SKIP_PAGE跳过一切jsp页前边面包车型客车输出,重返EVAL_PAGE试行页面余下一些

 

release(卡塔尔国          生命周期停止时调用

 

非常表明:在tomcat4.1之后的版本中暗中同意开启了标签缓冲池
(websphere和weblogic并不会如此做卡塔尔国,所以举行完标签后并不会进行release(卡塔尔(قطر‎方法(_jspDestroy(卡塔尔(قطر‎时才获释),也
便是说同三个jsp页面自定义标签不管选用多少次只会存在四个实例,但也并不是每一个标签都会为其创制多个缓冲池,要基于参数来决断,比如:

<cc:UserInfoTag user=”…” />

<cc:UserInfoTag />

下面例子中由于参数差异就能够创建七个标签缓冲池。

 

这一个标题可以通过设定tomcat的安插文件加以消除:
在%tomcat%\conf\web.xml出席enablePooling参数,并安装为false(不缓存自定义标签)。

<init-param>
  <param-name>enablePooling</param-name>
  <param-value>false</param-value>
</init-param>
 

清空%tomcat%\conf\目录


TagSupport类已经为大家兑现并增添了某个办法(比方在上述措施中大家能够直接运用pageContext对象,调用父标签getParent(卡塔尔(قطر‎等卡塔尔,所以日常处境下大家只需重写doStartTag(卡塔尔,doEndTag(卡塔尔(قطر‎就可以

 

TLD文件注脚:

<!–版本号–>

<tlib-version>1.0</tlib-version>

<jsp-version>2.0</jsp-version>

<short-name>cc</short-name>

<tag>

<!—钦赐标具名 –>

    <name>showUserInfo</name>

<!—钦赐标签类文件的任何径 –>

    <tag-class>com.mytags.UserInfoTag</tag-class>

<!–倘若无需标签体则设置empty,反之设定jsp –>

    <body-content>empty</body-content>

<!—设定属性(如若局地话State of Qatar –>

    <attribute>

<!—内定标签字 –>

       <name>user</name>

<!—是不是是必需,假使非必需没安装则为空 –>

        <required>false</required>

<rtexprvalue>true</rtexprvalue><!—是或不是可在品质中选用表达式
–>

    </attribute>

</tag>

 

 

Web.xml文件表明:

<jsp-config>

    <taglib>

<!–

标签库的uri路线

即jsp头文件中扬言<%@ taglib uri=”/mytaglib” prefix=”cc”%>

的uri

 –>

        <taglib-uri>/mytaglib</taglib-uri>

<!—tld文件所在的职位–>

       
<taglib-location>/WEB-INF/mytaglib.tld</taglib-location>

    </taglib>

  </jsp-config>

 

 

    public void setFocuswidth(int focuswidth) {
        this.focuswidth =
focuswidth;
    }

 

<?xml version=”1.0″ encoding=”ISO-8859-1″?>
<taglib>
<tlib-version>1.0</tlib-version>
<jsp-version>1.2</jsp-version>
<tag>
  <name>linktag</name>
  <tag-class>testtag.LinkTag</tag-class>
  <body-content>jsp</body-content>
  <attribute>
    <name>href</name>
    <required>true</required>
    <rtexprvalue>true</rtexprvalue>
  </attribute>
</tag>

JSP自定义标签开荒入门

貌似景观下开垦jsp自定义标签要求引用以下多个包

 

import javax.servlet.jsp.*;

import javax.servlet.jsp.tagext.*;

 

率先大家要求大概领会开辟自定义标签所关联到的接口与类的档次布局(在那之中SimpleTag接口与SimpleTagSupport类是JSP2.0中新引进的卡塔尔国。

新葡京32450网址 6

 

    public int doEndTag() {
        try {
        } catch (Exception e) {
            e.printStackTrace();
        }
        return EVAL_PAGE;
    }

<%@taglib uri=””
prefix=”w”%>

<jsp-config>
        <taglib>
            <taglib-uri>MyTagLib</taglib-uri>
            <taglib-location>/WEB-INF/MyTagLib.tld</taglib-location>
        </taglib>
    </jsp-config>

<tag>
        <name>newsImg</name>
        <tagclass>com.web.tag.MyNewsImg</tagclass>
        <bodycontent>empty</bodycontent>
        <info>pager tag provide the frame of the
page divider</info>
        <attribute>
            <name>parenttype</name>
            <required>true</required>
            <rtexprvalue>true</rtexprvalue>
        </attribute>
        <attribute>
            <name>childtype</name>
            <required>true</required>
            <rtexprvalue>true</rtexprvalue>
        </attribute>
        <attribute>
            <name>focuswidth</name>
            <required>false</required>
            <rtexprvalue>true</rtexprvalue>
        </attribute>
        <attribute>
            <name>focusheight</name>
            <required>false</required>
            <rtexprvalue>true</rtexprvalue>
        </attribute>
        <attribute>
            <name>imgnum</name>
            <required>false</required>
            <rtexprvalue>true</rtexprvalue>
        </attribute>
        <attribute>
            <name>titleLength</name>
            <required>false</required>
            <rtexprvalue>true</rtexprvalue>
        </attribute>
    </tag>

  1. <span style=”font-size: medium;”><%@ page language=”java” import=”java.util.*” pageEncoding=”UTF-8″%>  
  2. <%@taglib uri=”” prefix=”w”%>  
  3. <%@taglib uri=”” prefix=”c” %>  
  4. <%  
  5. String path = request.getContextPath();  
  6. String basePath = request.getScheme()+”://”+request.getServerName()+”:”+request.getServerPort()+path+”/”;  
  7. %>  
  8.   
  9. <!DOCTYPE HTML PUBLIC “-//W3C//DTD HTML 4.01 Transitional//EN”>  
  10. <html>  
  11.   <head>  
  12.     <base href=”<%=basePath%>”>  
  13.       
  14.     <title>My JSP ‘index.jsp’ starting page</title>  
  15.     <meta http-equiv=”pragma” content=”no-cache”>  
  16.     <meta http-equiv=”cache-control” content=”no-cache”>  
  17.     <meta http-equiv=”expires” content=”0″>      
  18.     <meta http-equiv=”keywords” content=”keyword1,keyword2,keyword3″>  
  19.     <meta http-equiv=”description” content=”This is my page”>  
  20.     <!–  
  21.     <link rel=”stylesheet” type=”text/css” href=”styles.css”>  
  22.     –>  
  23.   </head>  
  24.     
  25.   <body>  
  26.    <h3>音信列表</h3><hr/>  
  27.    <table>  
  28.    <tr><td>新闻编号</td><td>新闻题目</td><td>新闻内容</td></tr>   
  29.    <c:forEach items=”${pm.datas}” var=”news”>  
  30.    <tr><td>${news.id}</td><td>${news.name }</td><td>${news.detail}</td></tr>  
  31.    </c:forEach>  
  32.    </table>  
  33.    <w:pager pageSize=”${pageSize}” pageNo=”${pageNo}” url=”do.jsp” recordCount=”${pm.recordCount}”/>  
  34.   </body>  
  35. </html></span>  

4.在页面中调用自定义标签。

tld里面包车型地铁内容

好了,就地点的七个基本要素就已经构成了完全的分页标签,上边就差在页面包车型地铁施用格局了

 

    public int getFocusheight() {
        return focusheight;
    }

Java代码  新葡京32450网址 7

 

        } catch (Exception e) {
            e.printStackTrace();
        }
        return
EVAL_BODY_BUFFERED;
    }

META-INF中的文件
 
新葡京32450网址 8

新葡京32450网址 9新葡京32450网址 10代码

    public int getImgnum() {
        return imgnum;
    }

新葡京32450网址 11
更名字为jar后缀后显著,这样在同样目录就能够多出五个jar来了

public class LinkTag extends BodyTagSupport {

    public void setTitleLength(int titleLength) {
        this.titleLength =
titleLength;
    }
}

  1. <span style=”font-size: medium;”>package com.javacrazyer.web.tag;  
  2.   
  3. import java.io.IOException;  
  4. import java.util.Enumeration;  
  5.   
  6. import javax.servlet.http.HttpServletRequest;  
  7. import javax.servlet.jsp.JspException;  
  8. import javax.servlet.jsp.tagext.TagSupport;  
  9.   
  10.   
  11. /** 
  12.  * 分页标签管理类 
  13.  */  
  14. public class PagerTag extends TagSupport {  
  15.     private static final long serialVersionUID = 5729832874890369508L;  
  16.     private String url;         //请求URI  
  17.     private int pageSize = 10;  //每页要出示的记录数  
  18.     private int pageNo = 1;     //当前页号  
  19.     private int recordCount;    //总记录数  
  20.   
  21.     @SuppressWarnings(“unchecked”)  
  22.     public int doStartTag() throws JspException {  
  23.         int pageCount = (recordCount + pageSize – 1卡塔尔 / pageSize;  //总结总页数  
  24.           
  25.         //拼写要出口到页面包车型大巴HTML文本  
  26.         StringBuilder sb = new StringBuilder();  
  27.           
  28.           
  29.         sb.append(“<style type=\”text/css\”>”);  
  30.         sb.append(“.pagination {padding: 5px;float:right;font-size:12px;}”);  
  31.         sb.append(“.pagination a, .pagination a:link, .pagination a:visited {padding:2px 5px;margin:2px;border:1px solid #aaaadd;text-decoration:none;color:#006699;}”);  
  32.         sb.append(“.pagination a:hover, .pagination a:active {border: 1px solid #ff0000;color: #000;text-decoration: none;}”);  
  33.         sb.append(“.pagination span.current {padding: 2px 5px;margin: 2px;border: 1px solid #ff0000;font-weight: bold;#ff0000;color: #FFF;}”);  
  34.         sb.append(“.pagination span.disabled {padding: 2px 5px;margin: 2px;border: 1px solid #eee; color: #ddd;}”);  
  35.         sb.append(“</style>\r\n”);  
  36.         sb.append(“<div class=\”pagination\”>\r\n”);  
  37.         if(recordCount == 0){  
  38.             sb.append(“<strong>未有可展示的种类</strong>\r\n”);  
  39.         }else{  
  40.             //页号越界管理  
  41.             if(pageNo > pageCount){      pageNo = pageCount; }  
  42.             if(pageNo < 1){      pageNo = 1; }  
  43.               
  44.             sb.append(“<form method=\”post\” action=\””).append(this.url)  
  45.                 .append(“\” name=\”qPagerForm\”>\r\n”);  
  46.               
  47.             //获取需要中的全部参数  
  48.             HttpServletRequest request = (HttpServletRequest) pageContext  
  49.                     .getRequest();  
  50.             Enumeration<String> enumeration = request.getParameterNames();  
  51.             String name = null;  //参数名  
  52.             String value = null; //参数值  
  53.             //把央浼中的全部参数作为隐敝表单域  
  54.             while (enumeration.hasMoreElements()) {  
  55.                 name =  enumeration.nextElement();  
  56.                 value = request.getParameter(name);  
  57.                 // 去除页号  
  58.                 if (name.equals(“pageNo”)) {  
  59.                     if (null != value && !””.equals(value)) {  
  60.                         pageNo = Integer.parseInt(value);  
  61.                     }  
  62.                     continue;  
  63.                 }  
  64.                 sb.append(“<input type=\”hidden\” name=\””)  
  65.                   .append(name)  
  66.                   .append(“\” value=\””)  
  67.                   .append(value)  
  68.                   .append(“\”/>\r\n”);  
  69.             }  
  70.       
  71.             // 把当下页号设置成央浼参数  
  72.             sb.append(“<input type=\”hidden\” name=\””).append(“pageNo”)  
  73.                 .append(“\” value=\””).append(pageNo).append(“\”/>\r\n”);  
  74.               
  75.             // 输出计算数据  
  76.             sb.append(” 共<strong>”).append(recordCount)  
  77.                 .append(“</strong>项”)  
  78.                 .append(“,<strong>”)  
  79.                 .append(pageCount)  
  80.                 .append(“</strong>页: \r\n”);  
  81.               
  82.             //上生龙活虎页管理  
  83.             if (pageNo == 1) {  
  84.                 sb.append(“<span class=\”disabled\”>« 上一页”)  
  85.                     .append(“</span>\r\n”);  
  86.             } else {  
  87.                 sb.append(“<a href=\”javascript:turnOverPage(“)  
  88.                   .append((pageNo – 1))  
  89.                   .append(“)\”>« 上一页</a>\r\n”);  
  90.             }  
  91.               
  92.             //如若后面页数过多,展现”…”  
  93.             int start = 1;   
  94.             if(this.pageNo > 4){  
  95.                 start = this.pageNo – 1;  
  96.                 sb.append(“<a href=\”javascript:turnOverPage(1)\”>1</a>\r\n”);  
  97.                 sb.append(“<a href=\”javascript:turnOverPage(2)\”>2</a>\r\n”);  
  98.                 sb.append(“…\r\n”);  
  99.             }  
  100.             //呈现当前页周围的页  
  101.             int end = this.pageNo + 1;  
  102.             if(end > pageCount){  
  103.                 end = pageCount;  
  104.             }  
  105.             for(int i = start; i <= end; i++){  
  106.                 if(pageNo == iState of Qatar{   //当前页号没有必要超链接  
  107.                     sb.append(“<span class=\”current\”>”)  
  108.                         .append(i)  
  109.                         .append(“</span>\r\n”);  
  110.                 }else{  
  111.                     sb.append(“<a href=\”javascript:turnOverPage(“)  
  112.                         .append(i)  
  113.                         .append(“)\”>”)  
  114.                         .append(i)  
  115.                         .append(“</a>\r\n”);  
  116.                 }  
  117.             }  
  118.             //假如前面页数过多,展现”…”  
  119.             if(end < pageCount – 2){  
  120.                 sb.append(“…\r\n”);  
  121.             }  
  122.             if(end < pageCount – 1){  
  123.                 sb.append(“<a href=\”javascript:turnOverPage(“)  
  124.                 .append(pageCount – 1)  
  125.                 .append(“)\”>”)  
  126.                 .append(pageCount – 1)  
  127.                 .append(“</a>\r\n”);  
  128.             }  
  129.             if(end < pageCount){  
  130.                 sb.append(“<a href=\”javascript:turnOverPage(“)  
  131.                 .append(pageCount)  
  132.                 .append(“)\”>”)  
  133.                 .append(pageCount)  
  134.                 .append(“</a>\r\n”);   
  135.             }  
  136.               
  137.             //下风流浪漫页管理  
  138.             if (pageNo == pageCount) {  
  139.                 sb.append(“<span class=\”disabled\”>下一页 »”)  
  140.                     .append(“</span>\r\n”);  
  141.             } else {  
  142.                 sb.append(“<a href=\”javascript:turnOverPage(“)  
  143.                     .append((pageNo + 1))  
  144.                     .append(“)\”>下一页 »</a>\r\n”);  
  145.             }  
  146.             sb.append(“</form>\r\n”);  
  147.       
  148.             // 生成提交表单的JS  
  149.             sb.append(“<script language=\”javascript\”>\r\n”);  
  150.             sb.append(”  function turnOverPage(no){\r\n”);  
  151.             sb.append(”    if(no>”).append(pageCount).append(“){“);  
  152.             sb.append(”      no=”).append(pageCount).append(“;}\r\n”);  
  153.             sb.append(”    if(no<1){no=1;}\r\n”);  
  154.             sb.append(”    document.qPagerForm.pageNo.value=no;\r\n”);  
  155.             sb.append(”    document.qPagerForm.submit();\r\n”);  
  156.             sb.append(”  }\r\n”);  
  157.             sb.append(“</script>\r\n”);  
  158.         }  
  159.         sb.append(“</div>\r\n”);  
  160.           
  161.         //把生成的HTML输出到响应中  
  162.         try {  
  163.             pageContext.getOut().println(sb.toString());  
  164.         } catch (IOException e) {  
  165.             throw new JspException(e);  
  166.         }  
  167.         return SKIP_BODY;  //本标签主体为空,所以一贯跳过关键性  
  168.     }  
  169.   
  170.     public void setUrl(String url) {  
  171.         this.url = url;  
  172.     }  
  173.     public void setPageSize(int pageSize) {  
  174.         this.pageSize = pageSize;  
  175.     }  
  176.     public void setPageNo(int pageNo) {  
  177.         this.pageNo = pageNo;  
  178.     }  
  179.     public void setRecordCount(int recordCount) {  
  180.         this.recordCount = recordCount;  
  181.     }  
  182. }</span>  

标签扩张 BodyTagSupport 类。

    /**
     *
     */
    private static final long serialVersionUID =
-7631407752509462650L;
    private String parenttype;
    private String childtype;
    private int focuswidth = 300;

  1. <span style=”font-size: medium;”><%@ page language=”java” import=”java.util.*” pageEncoding=”UTF-8″%>  
  2. <%@page import=”com.javacrazyer.common.DAOFactory”%>  
  3. <%@page import=”com.javacrazyer.dao.NewsDao”%>  
  4. <%@page import=”com.javacrazyer.common.PageModel”%>  
  5. <%@page import=”com.javacrazyer.common.DataOptUtil”%>  
  6. <%@page import=”com.javacrazyer.common.Constant”%>  
  7. <%@page import=”com.javacrazyer.domain.News”%>  
  8. <%  
  9. NewsDao dao=(NewsDao)DAOFactory.newInstance(“newsdao”);  
  10.   
  11. int pageNo = 1;  
  12. String temp = request.getParameter(“pageNo”);  
  13. if (DataOptUtil.isNotNull(temp)) {  
  14.     pageNo = Integer.parseInt(temp);  
  15. }  
  16. int categoryid = 1;  
  17. String temp1 = request.getParameter(“category_id”);  
  18. if (DataOptUtil.isNotNull(temp1)) {  
  19.     categoryid = Integer.parseInt(temp1);  
  20. }  
  21. PageModel<News> pm=dao.findByPager(pageNo,Constant.PAGE_SIZE);  
  22. request.setAttribute(“pm”,pm);  
  23. request.setAttribute(“pageNo”, Integer.valueOf(pageNo));  
  24. request.setAttribute(“pageSize”, Constant.PAGE_SIZE);  
  25. request.getRequestDispatcher(“/index.jsp”).forward(request,response);  
  26. %></span>  

2.概念标签文件 MyTagLib.tld。

            BackNewsVO cxvo = new
BackNewsVO();
            cxvo.setChild_type(this.getChildtype());
            cxvo.setType(this.getParenttype());
            cxvo.setDisplay(“1”);
            cxvo.setCurrentTime(DateTime.Instance(卡塔尔.getCurrentTime(3卡塔尔卡塔尔(قطر‎;//
有效时间
            cxvo.setTitle_image_name(“true”卡塔尔;//
查询有图片的
            listnewspic = nbean.getNews(cxvo, 1, this.getImgnum());
            if (listnewspic != null && listnewspic.size() > 0) {
                for (BackNewsVO vo :
listnewspic) {
                    String fileName = vo.getTitle_image_name();
                    if (fileName !=
null && !fileName.equals(“”)) {
                        url += “/web/show.jsp?id=” + vo.getId()
                        + “%26type=” + vo.getType() +
“%26child_type=”
                        + vo.getChild_type()+”|”;
                        title += this.cutString(vo.getTitle(), this.getTitleLength()) + “|”;
                        if
(!fileName.substring(fileName.length() – 4,
                                fileName.length()).equalsIgnoreCase(“.jpg”))
{
                            img += “/web/images/errorimg.JPG|”;
                        } else {
                            img += “/uploadfile/”+fileName + “|”;
                        }
                    } else {
                        continue;
                    }
                }
                url = url.substring(0, url.length() – 1);
                title = title.substring(0, title.length() – 1);
                img = img.substring(0, img.length() – 1);
                img = img.replace(“\\”, “/”);
            }
            StringBuffer str = new
StringBuffer();
            str.append(“<script
type=\”text/javascript\”>\n”);
            str.append(“var focus_width=” + this.getFocuswidth() + “;\n”);
            str.append(“var focus_height=” + this.getFocusheight() + “;\n”);
            str.append(“var text_height=20;\n”);
            str.append(“var swf_height =
focus_height+text_height;\n”);
            str.append(“var t=0;\n”);
            str.append(“var pics=\”” + img + “\”;\n”);
            str.append(“var links=\”” + url + “\”;\n”);
            str.append(“var texts=\”” + title + “\”;\n”);
            str
                    .append(“document.write(‘<object
classid=\”clsid:d27cdb6e-ae6d-11cf-96b8-444553540000\”
codebase=\””
width=\”‘+ focus_width +’\” height=\”‘+ swf_height
+’\”>’);\n”);
            str
                    .append(“document.write(‘<param
name=\”allowScriptAccess\” value=\”sameDomain\”><param
name=\”movie\” value=\”/web/images/focus.swf\”><param
name=\”quality\” value=\”high\”><param name=\”bgcolor\”
value=\”#F0F0F0\”>’);\n”);
            str
                    .append(“document.write(‘<param name=\”menu\”
value=\”false\”><param name=wmode
value=\”opaque\”>’);\n”);
            str
                    .append(“document.write(‘<param
name=\”FlashVars\”
value=\”pics=’+pics+’&links=’+links+’&texts=’+texts+’&borderwidth=’+focus_width+’&borderheight=’+focus_height+’&textheight=’+text_height+’\”>’);\n”);
            str
                    .append(“document.write(‘<embed
src=\”pixviewer.swf\” wmode=\”opaque\”
FlashVars=\”pics=’+pics+’&links=’+links+’&texts=’+texts+’&borderwidth=’+focus_width+’&borderheight=’+focus_height+’&textheight=’+text_height+’\”
menu=\”false\” bgcolor=\”#F0F0F0\” quality=\”high\” width=\”‘+
focus_width +’\” height=\”‘+ focus_height +’\”
allowScriptAccess=\”sameDomain\”
type=\”application/x-shockwave-flash\”
pluginspage=\””
/>’);\n”);
            str.append(“document.write(‘</object>’);\n”);
            str.append(“</script>\n”);
            pageContext.getOut().write(str.toString());
            //
System.out.println(listnewspic.size());

实际使用示例,下边四个类保持不改变

import java.io.IOException;

    public int doAfterBody() throws JspTagException {
        try {
            //
bodyContent.getEnclosingWriter().write(bodyContent.getString());
        } catch (Exception e)
{
            e.printStackTrace();
        }
        return SKIP_BODY;
    }

Java代码  新葡京32450网址 12

 

<%@ taglib uri=”/WEB-INF/mytag.tld” prefix=”my”%>

Java代码  新葡京32450网址 13

    public int doStartTag() throws JspTagException {    
        return EVAL_BODY_BUFFERED;
      }
      
      public int doEndTag() throws JspTagException {
          
        String body = this.getBodyContent().getString();
        HttpServletRequest request = (HttpServletRequest)pageContext.getRequest();
        
        try {
            JspWriter writer= pageContext.getOut();
            String str=”<a href='”+this.href+”‘>”+body+”</a>”;
            pageContext.getOut().print(str);
        }
        catch (IOException e) {
          throw new JspTagException(e.getMessage());
        }
        return SKIP_BODY;
      }
}

    public String getChildtype() {
        return childtype;
    }

 

package testtag;

import
javax.servlet.jsp.JspTagException;
import
javax.servlet.jsp.tagext.BodyTagSupport;

Java代码  新葡京32450网址 14

新葡京32450网址 15新葡京32450网址 16代码

    private int focusheight = 250;

 

3.在web.xml中丰裕援用。

import java.io.Serializable;
import java.util.List;

 

 

相关文章

留下评论

网站地图xml地图