您的位置:首页 > Web前端 > JavaScript

jsp自定义标签

2014-01-24 15:29 225 查看
下拉列表枚举项有时候初始化比较麻烦,需要去数据库查询每个枚举项放进集合,然后在页面用jstl或者一些前台技术循环放进select ,有时候需要默认一些值,还需要比较确定是否option 是否应该具有selected 属性,所以很是麻烦,所以自定义标签 显得尤为重要。

首先自定义标签需要有以下几个步骤

1.编写tld文件

<?xml version="1.0" encoding="UTF-8" ?>

<taglib xmlns="http://java.sun.com/xml/ns/j2ee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"

    version="2.0">

    <description>nigo jsp tag library</description>

    <display-name>nigo</display-name>

    <tlib-version>0.1</tlib-version>

    <short-name>ng</short-name>

    <uri>http://www.jiuqi.com/nigo/jsp-tags</uri>

    <tag>

        <description>

            options using DatadictBean

        </description>

        <name>options</name>
        <tag-class>com.jiuqi.mobile.nigo.web.tags.OptionsTag</tag-class>

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

        <attribute>

            <description>

                mark value

            </description>

            <name>mark</name>

            <required>true</required>

            <rtexprvalue>true</rtexprvalue>

        </attribute>

        <attribute>

            <description>

                selected key

            </description>

            <name>selected</name>

            <required>false</required>

            <rtexprvalue>true</rtexprvalue>

        </attribute>

        <attribute>

            <description>

                whether contains 'please select' option, default is true

            </description>

            <name>addon</name>

            <required>false</required>

        </attribute>

    </tag>

</taglib>

设置标签的一些属性,最主要的是标签的实现类,红色标注的代码

2.jsp引入标签库

<%@ taglib prefix="ng" uri="http://www.jiuqi.com/nigo/jsp-tags"%>

3.实现标签实现类

public class OptionsTag extends TagSupport {

    private static final long serialVersionUID = 330784907215740876L;

    private String mark;

    private String selected;

    private String addon;

    public String getSelected() {

        return selected;

    }

    public void setSelected(String selected) {

        this.selected = selected;

    }

    public String getMark() {

        return mark;

    }

    public void setMark(String mark) {

        this.mark = mark;

    }

    public String getAddon() {

        return addon;

    }

    public void setAddon(String addon) {

        this.addon = addon;

    }

    public int doStartTag() throws JspException {

        JspWriter out = pageContext.getOut();

        StringBuffer buffer = new StringBuffer();

        int markInt = -1;

        try {

            markInt = Integer.parseInt(mark);

        } catch (NumberFormatException e) {

            markInt = -1;

        }

        if (addon == null || !addon.equals("false")) {

            buffer.append("<option value='0'>请选择 </option>");

        }

        DataDictionaryBean[] beans = DataDictionaryUtils.getInstance().get(

                markInt);

        if (beans != null) {

            for (DataDictionaryBean bean : beans) {

                buffer.append("<option ");

                buffer.append(" value=\"").append(bean.getCode()).append("\"");

                if (selected != null) {

                    if (String.valueOf(bean.getCode()).equals(selected)) {

                        buffer.append(" selected=\"selected\"");

                    }

                }

                buffer.append(">");

                buffer.append(bean.getName());

                buffer.append("</option>");

            }

        }

        try {

            out.print(buffer.toString());

            out.flush();

        } catch (IOException e) {

            e.printStackTrace();

        }

        return Tag.SKIP_BODY;

    }

    public int doEndTag() throws JspException {

        return Tag.EVAL_PAGE;

    }

}

其实最主要的就是在实现类里面编写好select需要的一些选项的html,在java里面实现东西总是比jsp实现方便的多

这样一来,select的初始化显得简单多了

<select class="selectbor" size="1"

                            name="mark" style="width: 150px;">

                                <option value="0">请选择mark名称</option>

                                <ng:options mark="99" addon="false" selected="${mark }"/>

仅需要一个标签 就可以将下拉列表的所有option收入select下 方便太多了
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: