在项目中可能有很多相同的jsp页面表示功能,这时可以使用自定义的tag进行定义,渐少重复的工作量便于日后维护!

下面就基于struts2进行自定义标签的定义与实现:

首先:自定义类MyTag继承struts2的Component

  1. package cookielogin;
  2.  
  3. import java.io.IOException;
  4. import java.io.Writer;
  5.  
  6. import org.apache.struts2.components.Component;
  7.  
  8. import com.opensymphony.xwork2.util.ValueStack;
  9.  
  10. public class MyTag extends Component {
  11. private ValueStack stack;
  12. private String text;
  13. private String name;
  14. private String defaultValue;
  15.  
  16. @Override
  17. public boolean start(Writer writer) {
  1. <span style="white-space:pre"> </span>//这里进行页面的输出
  2. try {
  3. writer.write("<h1>" + this.text + "</h1>");
  4. writer.write("<input name='text' value=");
  5. writer.write(this.getName());
  6. writer.write(" name='" + this.getName() + "'>");
  7. } catch (IOException e) {
  8. e.printStackTrace();
  9. }
  10. return super.start(writer);
  11. }
  12.  
  13. public MyTag(ValueStack stack) {
  14. super(stack);
  15. this.stack = stack;
  16. }
  17.  
  18. public ValueStack getStack() {
  19. return stack;
  20. }
  21.  
  22. public void setStack(ValueStack stack) {
  23. this.stack = stack;
  24. }
  25.  
  26. public String getText() {
  27. return text;
  28. }
  29.  
  30. public void setText(String text) {
  31. this.text = text;
  32. }
  33.  
  34. public String getName() {
  35. return name;
  36. }
  37.  
  38. public void setName(String name) {
  39. this.name = name;
  40. }
  41.  
  42. public String getDefaultValue() {
  43. return defaultValue;
  44. }
  45.  
  46. public void setDefaultValue(String defaultValue) {
  47. this.defaultValue = defaultValue;
  48. }
  49.  
  50. }

2:指定标签类MyTagSupport继承ComponentTagSupport

  1. package cookielogin;
  2.  
  3. import javax.servlet.http.HttpServletRequest;
  4. import javax.servlet.http.HttpServletResponse;
  5.  
  6. import org.apache.struts2.components.Component;
  7. import org.apache.struts2.views.jsp.ComponentTagSupport;
  8.  
  9. import com.opensymphony.xwork2.util.ValueStack;
  10.  
  11. public class MyTagSupport extends ComponentTagSupport {
  12.  
  13. private static final long serialVersionUID = 3586338980857274359L;
  14.  
  15. String name;
  16. String text;
  17.  
  18. @Override
  19. public Component getBean(ValueStack stack, HttpServletRequest req,
  20. HttpServletResponse res) {
  21. return new MyTag(stack);
  22. }
  23.  
  24. @Override
  25. // 设置bean值
  26. protected void populateParams() {
  27. System.out.println("开始设置参数!populateParams");
  28. MyTag tag = (MyTag) getComponent();
  29. tag.setName(name);
  30. tag.setText(text);
  31. tag.setDefaultValue("我就是默认值!咋滴!!");
  32. }
  33.  
  34. public String getName() {
  35. return name;
  36. }
  37.  
  38. public void setName(String name) {
  39. this.name = name;
  40. }
  41.  
  42. public String getText() {
  43. return text;
  44. }
  45.  
  46. public void setText(String text) {
  47. this.text = text;
  48. }
  49.  
  50. }

java代码完成后,进行配置文件的编写,在WEB-INF/tlds 新建自定义文件tags-custom.tld

  1. <?xml version="1.0" encoding="UTF-8"?>
  2.  
  3. <!DOCTYPE taglib PUBLIC
  4. "-//Sun Microsystems, Inc.//DTD JSP Tag Library 1.2//EN"
  5. "http://java.sun.com/dtd/web-jsptaglibrary_1_2.dtd">
  6.  
  7. <taglib>
  8. <tlib-version>2.0</tlib-version>
  9. <jsp-version>1.2</jsp-version>
  10. <short-name>ctags</short-name>
  11. <uri>http://www.cml.com/tags-custom</uri>
  12. <description>
  13. <![CDATA[
  14. <p>This is custom tag.</p>
  15. ]]>
  16. </description>
  17.  
  18. <tag>
  19. <description><![CDATA[我自定义的tag]]></description>
  20. <name>myTag</name>
  21. <tag-class>cookielogin.MyTagSupport</tag-class>
  22. <body-content>JSP</body-content>
  23. <attribute>
  24. <description><![CDATA[这个是我自定义的标签]]></description>
  25. <name>text</name>
  26. <required>true</required>
  27. </attribute>
  28. <attribute>
  29. <description><![CDATA[这个是我自定义的标签]]></description>
  30. <name>name</name>
  31. <required>true</required>
  32. </attribute>
  33. <attribute>
  34. <description><![CDATA[这个是我自定义的标签]]></description>
  35. <name>defaultValue</name>
  36. <required>false</required>
  37. </attribute>
  38. <dynamic-attributes>false</dynamic-attributes>
  39. </tag>
  40.  
  41. </taglib>

前提基础工作完成后,在页面引用:

<%@taglib prefix="d" uri="http://www.cml.com/tags-custom"%>

使用:

<d:myTag text="hhahh" name="sdfsd"></d:myTag>

访问页面后出现:

基于struts2的自定义标签实现完毕!虽然功能很简单,但是基本功能已经实现,可以根据项目的实际需要进行编辑!

struts2 自定义tag标签的更多相关文章

  1. 自定义tag标签-实现long类型转换成Date类型

    数据库里存储的是bigint型的时间,entity实体中存放的是long类型的标签,现在想输出到jsp页面,由于使用的是jstl标签,而要显示的是可读的时间类型,找来找去有个 fmt:formatDa ...

  2. Jsp 自定义tag标签

    1转自:https://blog.csdn.net/yusimiao/article/details/46835617 Jsp自定义tag标签 自定义tag标签的好处 程序员可以自定一些特定功能的标记 ...

  3. 自定义tag标签的方法

    JSP1.0中可以通过继承TagSupport或者BodyTagSupport来实现自定义的tag处理方法. JSP2.0中也支持另外一种更为简单的自定tag的方法,那就是直接讲JSP代码保存成*.t ...

  4. jsp如何自定义tag的标签库?

    虽然和上一次的使用自定义的tld标签简化jsp的繁琐操作的有点不同,但是目的也是一致的.自定义tag比较简单. 1.新建tag标签 在WEB-INF目录下新建一个tags的文件夹,是自定义tag标签的 ...

  5. Struts2自定义标签4自定义分页标签

    第一步:webroot/web-inf下的str.tld文件 <?xml version="1.0" encoding="UTF-8"?> < ...

  6. Struts2自定义标签3模仿原有的s:if s:elseif s:else自定义自己的if elsif else

    第一步:webroot/web-inf下简历str.tld文件 <?xml version="1.0" encoding="UTF-8"?> < ...

  7. Struts2自定义标签2自定义一个按班级id查询出该班级下的学生,存放进值栈,并遍历出来。

    Struts2自定义标签的流程概念: (1)需要两个类:标签类(继承相应的tag类),基本类(继承Component).标签类专门负责从客户端取得用户输入的一些属性,这个普通的jsp自定义标签一样,取 ...

  8. 自定义简单的struts2的s标签

    一:自定标签前需要了解的知识: BodyTagSupport类的方法: 编写标签对应的实现类时,需要重载BodyTagSupport类几个方法:doStartTag(), setBodyContent ...

  9. [JavaWeb基础] 012.Struts2 自定义标签使用

    在做开发中,我们会把一些比较经常使用到的代码封装起来,这样可以加快开发的速度和减少错误,并且在修改bug可以一次修改多次修复.那么在前端页面上,如果我们要经常用到公用的显示功能,并涉及到服务端逻辑操作 ...

随机推荐

  1. [PHP][linux] 命令行脚本接收传入参数的

    第一种 :用{ $argv }接受参数 第二种 : getopt() 第三种:

  2. python函数-易错知识点

    定义函数: def greet_users(names): #names是形参 """Print a simple greeting to each user in th ...

  3. leetcode-0101 对称二叉树

    题目地址 https://leetcode-cn.com/problems/symmetric-tree/ 1.递归 本题最简单的思路是递归,可以假设两棵一模一样的树在进行镜像对比.他们之间的关系满足 ...

  4. shift count is too large

    STM8S是8 bit单片机在STM8S中 unsigned long是32位, unsigned short和unsigned int都是16位,unsigned char是8位. 以以下代码编译时 ...

  5. Centos史上新版最详细步骤-Linux无脑命令式oracle11g静默安装

    1. 关闭selinux 1.1 sed -i "s/SELINUX=enforcing/SELINUX=disabled/" /etc/selinux/config 1.2 或者 ...

  6. Scala教程之:静态类型

    文章目录 泛类型 型变 协变 逆变 不变 类型上界 类型下界 内部类 抽象类型 复合类型 自类型 隐式参数 隐式转换 多态方法 类型推断 Scala是静态类型的,它拥有一个强大的类型系统,静态地强制以 ...

  7. javescrip内嵌样式与外联样式怎么做?

    对于前端初学者,个人JS样式常用的有两种:内嵌样式 ,外联样式:下面通过一个简单的鼠标点击出现设定的验证数字为例进行演示: 先看下效果: 鼠标点击前效果: 鼠标点击后效果: 图中的这个ojbk是我js ...

  8. Android xUtils3.0使用手册(二) - 数据库操作

    步骤:  (1). 创建数据表: (2). DaoConfig 获取数据库的配置信息: (3).  获取数据库实例:  x.getDb(daoConfig); (4). 数据库的增删改查. 1. 创建 ...

  9. Golang——Cron 定时任务

    开门见山写一个 package main import ( "fmt" "github.com/robfig/cron" "log" &qu ...

  10. 2019 Multi-University Training Contest 10 I Block Breaker

    Problem Description Given a rectangle frame of size n×m. Initially, the frame is strewn with n×m squ ...