jsp自定义select标签的使用

为了统一管理和简化修改,本文档详细介绍了如何在项目中创建一个自定义的select标签,用于部门选择下拉框。步骤包括:定义继承自`RequestContextAwareTag`的Java标签类,编写tld配置文件,创建tag标签文件,并在web.xml中配置tld,最后在jsp页面中使用自定义标签。该自定义标签结合easyui,能自动从指定URL获取后台数据。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

项目中多次使用到了部门选择下拉框,于是决定把此下拉框提取成一个自定义标签。自定义标签可以方便统一管理和一处修改的好处

  1. 步骤一:定义java的tag类,这个类继承了spring的org.springframework.web.servlet.tags.RequestContextAwareTag类。
@SuppressWarnings("serial")
public class DeptCodeTag extends RequestContextAwareTag{

    @Override
    protected int doStartTagInternal() throws Exception {
        //这里可以获取WebApplicationContext,然后获取service,调用service方法去获取部门集合,然后放到pageContext传递到前端进行select标签的组装。
        return 0;
    }
}
  1. 步骤二:定义tld文件dept_code.tld。文件放在WEB-INF目录下,否则会报错。
<?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"  
        xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-jsptaglibrary_2_0.xsd"  
        version="2.0">  

    <tlib-version>1.1</tlib-version><!--版本号-->  
    <short-name>dept_Sel</short-name>
    <!--后面引用的短名称-->  
    <uri>http://www.lancy.com/media/tag</uri>
    <!--定义uri,便于后面引用定位-->  
    <tag>  
        <name>deptCode</name>
        <!--名字-->  
        <tag-class>com.lancy.customTag.dept.DeptCodeTag</tag-class>
        <!--指向步骤1中定义的java的tag类-->  
        <body-content>empty</body-content>
        <!--使用empty即可-->  
    </tag>  

</taglib>
  1. 步骤三:定义tag标签文件deptCode.tag。与tld文件放同一目录下,
<%@tag pageEncoding="utf-8" %><!--定义编码,防止乱码 -->  
<%@taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %><!--引入c标签-->  
<%@taglib prefix="deptSel" uri="http://www.lancy.com/media/tag" %>
<!--  引入我们自定义的tld文件,定义前缀为deptSel(这个可以根据自己项目任意定义),uri值是tld文件中的uri值-->  
<!-- 下面定义这个select标签需要的属性字段-->
<!--name:属性的名字,required:使用这个标签时候,本属性是否必须的;type:这个属性值的类型;
rtexprvalue:这个标签是否支持el表达式,我们设置为true,支持表达式,这样就可以在引用时候动态设置值--> 
<!--重点是定义一些属性,不同的部门选择框就可以有不同的名称,取值等--> 
<%@attribute name="hiddenName" required="true" rtexprvalue="true" %>
<%@attribute name="value" required="true" rtexprvalue="true" %>
<%@attribute name="name" required="true" rtexprvalue="true" %>  
<%-- <deptSel:deptCode/> --%><!--引入文件2中订阅的listLevelCode,就相当于引入了步骤一中的java代码,这样我们就能访问步骤一中定义的levelCodeList对象。yq就是第三行定义的前缀,liestLevelCode就是步骤2中定义的name值-->  


        <select class="easyui-combotree" name="${name}" style="width:95%"
                        data-options="
                        url: _ctx+'/dept/tree',
                        readonly:false,
                        required:false,
                        parentField:'parentId',
                        textField:'deptName',
                        idField:'deptId',
                        hiddenName:'${hiddenName}',
                        multiple:true,
                        hasDownArrow:false,
                        cascadeCheck:false,
                        values:'${value}',
                        icons: [{
                           iconCls:'app-del',
                           handler: function(e){
                               $(e.data.target).combotree('clear');
                           }
                         }],
                         prompt:'请选择部门'
                     ">
                    </select>
  1. 步骤四:web.xml中配置tld文件
<jsp-config>  
       <taglib>  
           <taglib-uri>http://www.lancy.com/media/tag</taglib-uri><!--这个地址就是步骤2中的uri值-->  
           <taglib-location>/WEB-INF/tags/dept_code.tld</taglib-location><!--这个值就是步骤2中定义的tld文件的路径-->  
       </taglib>  
   </jsp-config>
  1. 步骤五:jsp使用自定义标签
<%@ taglib prefix="deptSel" tagdir="/WEB-INF/tags" %><!--jsp页面引入标签-->
<deptSel:deptCode name="deptId" hiddenName="" value="${vo.deptId}"/>
<!--deptSel是步骤3中定义的别名,deptCode是tag文件的名称-->

以上就完成了一个自定义select标签,这个select标签是easyui的标签,页面加载以后会自动根据标签里的url: _ctx+’/dept/tree’ 去后台查询结果。

@RequestMapping(value="/tree",method=RequestMethod.POST)
    @ResponseBody
    public Object tree(HttpServletRequest request){
        List<SysDept> list = sysDeptService.query(request);
        return list;
    }

完成,另外可以参考(http://blog.youkuaiyun.com/mos_wen/article/details/53930647),根据这个参考实现自己的

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值