最近闲来无事,就想把以前的毕业设计给重新改造一番,改造前的框架为Struts2+Spring+Hibernate+Sql Server 2005,改造为Struts2+Spring+mybatis+mysql,最近两年mybatis用的比较多,而mysql以前没用涉及过,最终的表结构重新设计了一份,加入了外键,增加了窄表的设计,系统入口增加url过滤,系统异常日志使用拦截器统一处理,其他业务逻辑大致保持原样,为了使呈现层更加多样性,特意增加了Struts2的自定义标签,下面是详细的开发过程。
先来了解下Struts2的自定义标签,struts的扩展开发都是由struts2-core-xx.jar的具体支持,框架在struts初始化过程中会加载诸多配置文件,我们要做的就是要弄明白,具体的文件放置在何处。
我们的标签需要在jsp中引用,就像struts的s标签的引用,就像<%@taglib prefix="s" uri="/struts-tags"%>,我们自定义的标签也一样,<%@taglib prefix="f" uri="/feng"%>,那么该标签定义在哪里呢?没错,就是tld文件,feng.tld文件要放置在“项目/WEB-INF/”目录下,内容如下
<?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.2.3</tlib-version> <jsp-version>1.2</jsp-version> <short-name>f</short-name> <uri>/feng</uri> <display-name>"feng Tags"</display-name> <tag> <name>date</name> <tag-class>com.struts.extend.tag.date.DateTag</tag-class> <body-content>empty</body-content> <description></description> <attribute> <name>name</name> <required>true</required> <rtexprvalue>false</rtexprvalue> <description><![CDATA[input日期的名字,该属性必须有,作为传递参数名称使用]]></description> </attribute> <attribute> <name>id</name> <required>true</required> <rtexprvalue>false</rtexprvalue> <description><![CDATA[该属性必须有,作为组件标识使用,如果没有意义,则可是使用name相同的值]]></description> </attribute> ... </tag> </taglib>
其中<attribute>为标签的传入参数,<tag-class>表示标签动态生成的java类,该类需要继承AbstractUITag或者其父类ComponentTagSupport,实现以下方法:
public Component getBean(ValueStack vs, HttpServletRequest res, HttpServletResponse req) { return new Date(vs, res, req); } //实体类设置参数 protected void populateParams() { Date date = (Date) this.component; date.setId(this.id); date.setName(this.name); }
其中Date为具体的实体类,需要继承org.apache.struts2.components.UIBean,实现以下方法:
public Date(ValueStack stack, HttpServletRequest request, HttpServletResponse response) { super(stack, request, response); } //模板的名称 protected String getDefaultTemplate() { return "date"; } //参数初始化 public void evaluateParams() { super.evaluateParams(); if (this.id != null) { addParameter("id", findString(this.id)); } addParameter("name", findString(this.name)); }
最后,就是具体的模板了,模板要放置在“项目/template”文件夹的simple或者xhtml中,LZ使用的ftl作为模板,名称date.ftl,ftl的语法不做赘述,样例如下:
<input<#rt/> id="${parameters.id}" name="${parameters.name}" type="text" <#rt/> /><#rt/>
上述模板的类型,文件目录和类型可在strtus.propertis或者strtus.xml中配置:
### Standard UI theme ### Change this to reflect which path should be used for JSP control tag templates by default struts.ui.theme=xhtml struts.ui.templateDir=template #sets the default template type. Either ftl, vm, or jsp struts.ui.templateSuffix=ftl
好了,最后看看做好的标签怎么使用呢,就这么简单
<f:date name="test" id="test"/>
整个struts请求到jsp页面到最终渲染成html静态页面的过程如上述,过程稍显繁杂,但熟悉之后会发现封装性还是很好的,模板中可以和其他js进行关联,待静态页面生成后效果显现。
相关推荐
在Struts2中,自定义标签是提高代码可读性和可维护性的重要工具。本文将深入探讨Struts2自定义标签的实现机制、优点以及如何在实际项目中进行应用。 一、Struts2自定义标签的概念 自定义标签是JSP的一种扩展,允许...
自定义标签是Struts2框架中的一个重要特性,它允许开发者创建自己的标签库,以更直观、易读的方式在JSP页面中处理业务逻辑。下面将详细介绍Struts2自定义标签的相关知识点。 首先,理解自定义标签的作用。在传统的...
在Struts2中,自定义标签的实现通常包括以下步骤: 1. **定义TLD(Tag Library Descriptor)文件**: TLD文件是XML格式的,用于描述自定义标签的属性、行为以及它们之间的关系。在这个例子中,我们为分页标签添加...
在Struts2中,自定义标签的实现是提升可重用性和简化视图层代码的一个重要特性。下面我们将深入探讨如何在Struts2中实现自定义标签,以及其背后的原理。 自定义标签的创建主要涉及以下三个步骤: 1. **创建taglib...
在Struts2中,自定义标签是开发者扩展框架功能和简化视图层编码的重要手段。自定义标签允许将复杂的逻辑封装到可重用的组件中,提高代码的可读性和可维护性。 在Struts2中创建自定义标签,通常涉及以下几个步骤: ...
4. **创建分页标签库**:Struts2支持自定义标签,你可以创建一个`.tld`文件来定义分页标签。标签库应该包含开始、结束、上一页、下一页等标签,以便在视图层中方便地使用。 5. **实现标签处理类**:对应的Java类...
自定义标签是Struts2的一个重要特性,允许开发者扩展框架的功能,提供更友好的界面元素。在这个基于Struts2的自定义分页标签的实践中,我们将深入探讨如何创建、配置和使用自定义标签来实现数据的分页展示,同时与...
本篇文章将深入探讨如何在Struts 2中实现自定义标签进行分页,包括简单的上下分页和数字分页。 首先,我们需要理解分页的基本概念。分页是指将大量数据分成若干小部分,每次只显示一部分,通过翻页来查看其他部分。...
在 Struts 中,自定义标签是提供一种灵活的方式,使得视图层(通常为 JSP 页面)能够更好地与业务逻辑交互,从而提高代码的可读性和可维护性。本文将深入探讨如何在 Struts 中实现自定义标签。 一、自定义标签概述 ...
在Struts2框架中,自定义标签是扩展和优化应用功能的重要手段,它允许开发者创建符合业务逻辑且可重用的视图组件。本实例将深入探讨如何在Struts2中实现自定义标签,以及其背后的原理和步骤。 首先,自定义标签在...
STRUTS自定义标签STRUTS自定义标签STRUTS自定义标签STRUTS自定义标签STRUTS自定义标签STRUTS自定义标签STRUTS自定义标签STRUTS自定义标签STRUTS自定义标签STRUTS自定义标签STRUTS自定义标签STRUTS自定义标签STRUTS...
### Struts2自定义标签详解 #### 一、引言 在Web开发中,Struts2框架因其灵活性和强大的功能而被广泛采用。其中,自定义标签是提高代码复用性和增强页面展示效果的重要手段。本文将深入探讨如何在Struts2中创建...
在Struts2中,自定义标签可以用来扩展JSP页面的功能,使其能够更好地与后台业务逻辑交互。 自定义标签的实现通常分为以下几个步骤: 1. **创建标签库**:定义一个XML文件(如struts-tags.xml),用于声明自定义...
自定义标签,直接代码,直接模仿开发即可 public class ButtonTag extends AttributeTag { //tld中定义的属性 public String label; public String url; public String click; public String confirm; public ...
自定义标签是Struts2的一个强大特性,允许我们扩展框架的功能,以满足特定项目的需求。在这个例子中,我们将深入理解如何在Struts2中创建一个自定义的`gageTextField`标签。 1. **创建UIBean(UI组件)** UIBean,...
本示例"struts2自定义结果类型demo"旨在演示如何在Struts2中创建并使用自定义结果类型。首先,我们需要了解Struts2的结果类型工作原理: 1. **默认结果类型**: - Struts2提供了一些内置的结果类型,如`dispatcher...