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

jsp自定义select标签的使用

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

步骤一:定义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;
}
}


步骤二:定义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>


步骤三:定义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>


步骤四: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.tl
4000
d</taglib-location><!--这个值就是步骤2中定义的tld文件的路径-->
</taglib>
</jsp-config>


步骤五: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.csdn.net/mos_wen/article/details/53930647),根据这个参考实现自己的
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息