1.首先编写类继承TagSupport 实现doStartTag方法,因为我需要传入角色名称控制标签的内容是否显示。新增一个成员变量roleName。生成get和set方法。 package com.chelement.core.web.tag;
import javax.servlet.jsp.JspException; import javax.servlet.jsp.tagext.TagSupport;
public class PermissionTag extends TagSupport {
/**
*
*/
private static final long serialVersionUID = 8439587194052926231L;
// 通过判断角色名称和url是否有对应的
private String roleName;
@Override
public int doStartTag() throws JspException {
// if you have the role should EVAL_BODY_INCLUDE EVAL_BODY_INCLUDE
// if u do not have the role you should not show SKIP_BODY
if (roleName.trim().equals("admin")) {
return EVAL_BODY_INCLUDE;
}
return SKIP_BODY;
}
public String getRoleName() {
return roleName;
}
public void setRoleName(String roleName) {
this.roleName = roleName;
}
}
2.编写tld文件,关键点:在resources目录下创建文件夹META-INF,新建一个tld文件。 内容大致如下: <taglib> <tlibversion>1.0</tlibversion> <jspversion>1.1</jspversion> <shortname>access</shortname> <uri>/demo-tags</uri> <tag> <name>access</name> <tagclass>com.chelement.core.web.tag.PermissionTag</tagclass> <attribute> <name>roleName</name> <required>true</required> </attribute> </tag> </taglib> 第一是URI,第二个是access 。第三个是name ,因为有一个参数,so 我们只有一个attribute,多个就添加多个。
再修改pom文件增加 <plugin> <artifactId>maven-jar-plugin</artifactId> <configuration> <classesDirectory>target/classes/</classesDirectory> <archive> <addMavenDescriptor>false</addMavenDescriptor> </archive> </configuration> </plugin> 确保tld文件可以打包进入jar。
最后如果其他工程引入这个jar。在jsp中使用如下: 引入标签: <%@taglib prefix="test" uri="/demo-tags"%>
使用标签: <test:access roleName="admin">我是小矮人1</test:access> <test:access roleName="channel">我是小矮人2</test:access> <test:access roleName="admin">我是小矮人3</test:access>