struts2 自定义tag标签

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

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

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

package cookielogin;

import java.io.IOException;
import java.io.Writer;

import org.apache.struts2.components.Component;

import com.opensymphony.xwork2.util.ValueStack;

public class MyTag extends Component {
	private ValueStack stack;
	private String text;
	private String name;
	private String defaultValue;

	@Override
	public boolean start(Writer writer) {
<span style="white-space:pre">		</span>//这里进行页面的输出
		try {
			writer.write("<h1>" + this.text + "</h1>");
			writer.write("<input name='text' value=");
			writer.write(this.getName());
			writer.write(" name='" + this.getName() + "'>");
		} catch (IOException e) {
			e.printStackTrace();
		}
		return super.start(writer);
	}

	public MyTag(ValueStack stack) {
		super(stack);
		this.stack = stack;
	}

	public ValueStack getStack() {
		return stack;
	}

	public void setStack(ValueStack stack) {
		this.stack = stack;
	}

	public String getText() {
		return text;
	}

	public void setText(String text) {
		this.text = text;
	}

	public String getName() {
		return name;
	}

	public void setName(String name) {
		this.name = name;
	}

	public String getDefaultValue() {
		return defaultValue;
	}

	public void setDefaultValue(String defaultValue) {
		this.defaultValue = defaultValue;
	}

}

2:指定标签类MyTagSupport继承ComponentTagSupport

package cookielogin;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.apache.struts2.components.Component;
import org.apache.struts2.views.jsp.ComponentTagSupport;

import com.opensymphony.xwork2.util.ValueStack;

public class MyTagSupport extends ComponentTagSupport {

	private static final long serialVersionUID = 3586338980857274359L;

	String name;
	String text;

	@Override
	public Component getBean(ValueStack stack, HttpServletRequest req,
			HttpServletResponse res) {
		return new MyTag(stack);
	}

	@Override
	// 设置bean值
	protected void populateParams() {
		System.out.println("开始设置参数!populateParams");
		MyTag tag = (MyTag) getComponent();
		tag.setName(name);
		tag.setText(text);
		tag.setDefaultValue("我就是默认值!咋滴!!");
	}

	public String getName() {
		return name;
	}

	public void setName(String name) {
		this.name = name;
	}

	public String getText() {
		return text;
	}

	public void setText(String text) {
		this.text = text;
	}

}

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

<?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>2.0</tlib-version>
	<jsp-version>1.2</jsp-version>
	<short-name>ctags</short-name>
	<uri>http://www.cml.com/tags-custom</uri>
	<description>
	<![CDATA[
		   <p>This is custom tag.</p>
	]]>
	</description>

	<tag>
		<description><![CDATA[我自定义的tag]]></description>
		<name>myTag</name>
		<tag-class>cookielogin.MyTagSupport</tag-class>
		<body-content>JSP</body-content>
		<attribute>
			<description><![CDATA[这个是我自定义的标签]]></description>
			<name>text</name>
			<required>true</required>
		</attribute>
		<attribute>
			<description><![CDATA[这个是我自定义的标签]]></description>
			<name>name</name>
			<required>true</required>
		</attribute>
		<attribute>
			<description><![CDATA[这个是我自定义的标签]]></description>
			<name>defaultValue</name>
			<required>false</required>
		</attribute>
		<dynamic-attributes>false</dynamic-attributes>
	</tag>

</taglib>

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

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

使用:

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

访问页面后出现:

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

struts2 自定义tag标签,布布扣,bubuko.com

时间: 2024-11-10 00:06:28

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

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

数据库里存储的是bigint型的时间,entity实体中存放的是long类型的标签,现在想输出到jsp页面,由于使用的是jstl标签,而要显示的是可读的时间类型,找来找去有个 fmt:formatDate可以转化,但是只能将String类型的转成date型,long型则不可以,思考了好久,又不想破环jsp页面这种标签结构,参考网上jstl标签编写方法,如下:第一步 写一个类继承TagSupport,实现doStartTag() 方法. package com.pp.yxx.util.tags;

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

虽然和上一次的使用自定义的tld标签简化jsp的繁琐操作的有点不同,但是目的也是一致的.自定义tag比较简单. 1.新建tag标签 在WEB-INF目录下新建一个tags的文件夹,是自定义tag标签的位置. 2.编辑标签 <%@ tag import="org.apache.shiro.util.StringUtils"%> <%@ tag import="org.apache.shiro.SecurityUtils" %> <%@ t

Struts2 自定义下拉框标签Tag

自定义标签主要包括三个步骤: 1.编写java类,继承TagSupport类: 2.创建tld文件,影射标签名和标签的java类: 3.jsp页面引入tld. 例子:自定义下拉框标签 如果页面上有下拉选择框,通常最好的解决方法是使用数据字典,因为有可能多个页面 使用同一个下拉框,便于后台统一维护. 自定义Tag类 import java.io.IOException; import javax.servlet.jsp.JspException; import javax.servlet.jsp.

java中结合struts2自定义标签的使用

java中结合struts2自定义标签的使用 一.建立一个继承于SimpleTagSupport类实现它的doTag方法 1 package com.xiangshang.tag; 2 3 import java.io.IOException; 4 import java.util.List; 5 6 import javax.servlet.jsp.JspException; 7 import javax.servlet.jsp.PageContext; 8 import javax.serv

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

第一步:webroot/web-inf下简历str.tld文件 1 <?xml version="1.0" encoding="UTF-8"?> 2 <!DOCTYPE taglib PUBLIC "-//Sun Microsystems, Inc.//DTD JSP Tag Library 1.1//EN" "http://java.sun.com/j2ee/dtds/web-jsptaglibrary_1_1.dt

自定义简单的struts2的s标签

一:自定标签前需要了解的知识: BodyTagSupport类的方法: 编写标签对应的实现类时,需要重载BodyTagSupport类几个方法:doStartTag(), setBodyContent(), doInitBody(), doAfterBody(), doEndTag(); 他们执行顺序如下: doStartTag()→doInitBody()→setBodyContent()→doAfterBody()→doEndTag() doStartTag()方法可返回EVAL_BODY_

JSP自定义分页标签TAG

首先我们需要在WEB-INF/tld/目录下创建page.tld文件 <?xml version="1.0" encoding="ISO-8859-1"?> <taglib> <tlib-version>1.0</tlib-version> <jsp-version>1.2</jsp-version> <short-name>page</short-name> <u

自定义JSP标签示例

我们以一个例子来讲解如何自定义JSP标签,假如我们需要在页面中输出当前的时间,按照最简单的JSP脚本,需要在JSP里面写很多Java代码,那么如何来使用自定义标签实现这个功能呢? 首先,我们要先创建一个类,继承TagSupport类: 1 import java.io.IOException; 2 import java.text.SimpleDateFormat; 3 import java.util.Date; 4 import javax.servlet.jsp.JspException;

Struts2自定义类型转换,和处理类型转换错误

Struts2自定义类型转换: 从前台接受到的类型全部是字符串,Struts2自带的一些基本类型转换有时不能满足我们的特别需要,如:日期字符串输入格式,还有一些自定义的类,直接传到后台,我们需要一些自己的转换器: 例: 我有一个Point类型: package cn.jnit.bean; public class Point { private Integer x; private Integer y; public Point() { } public Point(Integer x, Int