tag自定义标签使用

后端代码:

自定义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>

 

转载于:https://my.oschina.net/githubhty/blog/1576506

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值