后端代码:
自定义tag标签
import javax.servlet.jsp.JspTagException;
import javax.servlet.jsp.JspWriter;
import org.springframework.stereotype.Component;
import org.springframework.web.servlet.tags.RequestContextAwareTag;
@Component
public class MySimpleTag extends RequestContextAwareTag{
private static final long serialVersionUID = 1L;
private SchoolService schoolService;
private ManageService manageService;
private String name;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
/* @Override//当遇到标签时就会执行这个方法
public void doTag() throws JspException, IOException {
System.out.println("执行了简单标签里的doTag()方法~"+name);
//4.1 创建一个临时的Writer输出流(容器)
StringWriter writer = new StringWriter();
//4.2 把标签体内容拷贝到临时的Writer流中
// JspFragment jspBody = this.getJspBody();
// jspBody.invoke(writer);
// //4.3 从临时的Writer流中取出标签体内容
String content = writer.toString();
// //4.4 改变标签体内容
// content = content.toUpperCase();
if("school".equals(name)){
// SchoolInfo schoolinfo = schoolService.getSchoolById(“id”)
// content = schoolinfo.getSchoolnm();
content = "XXXX";
}else if("user".equals(name)){
content = “username”;//service查询用户名
}
//4.5 把改变后的内容写出到浏览器中
//jspBody.invoke(null);如果这样写,那么还是输出原来的内容
this.getJspContext().getOut().write(content);
}*/
//当遇到标签时就会执行这个方法
public int doStartTagInternal() throws JspTagException {
JspWriter out = pageContext.getOut(); // 重要
StringBuffer sb = new StringBuffer();
try {
schoolService = (SchoolService) this.getRequestContext().getWebApplicationContext().getBean("schoolService");
manageService = (ManageService) this.getRequestContext().getWebApplicationContext().getBean("manageService");
if("school".equals(name)){
SchoolInfo schoolinfo = schoolService.getSchoolById(ThreadTokenHolder.getUser().getSchoolid());
sb.append(schoolinfo.getSchoolnm());
}else if("user".equals(name)){
sb.append(“username”);//service调用方法查询用户名
}else if("manage".equals(name)){
String banm ="baname";
sb.append(banknm);//service调用方法查询需要的数据
}
out.print(sb.toString());
} catch (Exception e) {
logger.error(e.getMessage(),e);
e.printStackTrace();
}
return EVAL_PAGE; // 表示处理完标签后继续执行以下的JSP网页
// return SKIP_PAGE; //表示不处理接下来的JSP网页
}
}
前端代码:
<%@taglib uri="http://htystag.com/mytag" prefix="mmt" %><!-- 引用自定义标签-->
<span><mmt:simpletag name="user"></mmt:simpletag></span><!-- 不同name在后端代码可以实现查询不同数据并显示-->
<mmt:simpletag name="school"></mmt:simpletag>
tag.xml文件
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE taglib
PUBLIC "-//Sun Microsystems, Inc.//DTD JSP Tag Library 1.2//EN"
"http://java.sun.com/dtd/web-jsptaglibrary_1_2.dtd">
<taglib>
<tlib-version>1.0</tlib-version><!-- 代表标签库的版本号 -->
<jsp-version>1.2</jsp-version><!-- 代表jsp的版本 -->
<short-name>mtt</short-name><!-- 你的标签库的简称 -->
<uri>http://htystag.com/mytag</uri><!-- 你标签库的引用uri -->
<tag>
<name>simpletag</name>
<!--实现类的路径及标签名-->
<tag-class>com.manager.service.MySimpleTag</tag-class>
<body-content>scriptless</body-content>
<attribute>
<name>name</name> <!-- name -->
<required>true</required><!-- 必须输入 -->
<rtexprvalue>true</rtexprvalue><!-- 容许el表达式赋值 -->
</attribute>
</tag>
<!--传统标签 <tag>
<name>mytah</name>你定义的标签的名称
<tag-class>com.vmaxtam.dotest.MyTagTest</tag-class>对应的标签处理程序:包名+类名
<body-content>JSP</body-content>标签体内容的格式
</tag> -->
</taglib>