`
zhangxiaofei
  • 浏览: 5601 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
文章分类
社区版块
存档分类
最新评论

jsp 自定义标签之数据字典

    博客分类:
  • j2ee
阅读更多
  集成spring实现jsp自定义标签数据字典

数据字典就是使用的html下拉框,实现数据显示的功能,但日常的应用中,很多数据都是动态加载的,不能在页面上直接写死,方便后期的维护和数据更新,同时也可以实现代码的复用。
形如:


解析过程:
1、在JSP中使用标签库标签
<%@ taglib prefix="dataDic" uri="/WEB-INF/dataDic.tld" %>


2、Web容器根据第二个步骤中的prefix,获得第一个步骤中声明的taglib的uri属性值
3、Web容器根据uri属性在web.xml找到对应的元素
4、从元素中获得对应的元素的值
5、Web容器根据元素的值从WEB-INF/目录下找到对应的.tld文件
6、从.tld文件中找到与tagname对应的元素
7、凑元素中获得对应的元素的值
8、Web容器根据元素的值创建相应的tag handle class的实例
9、 Web容器调用这个实例的doStartTag/doEndTag方法完成相应的处理

实现:
了解了自定义标签的解析过程,实现过程正好和解析过程反过来就可以了。
实现标签类:
/**
  * 数据字典的自定义标签
*/
public class DataDictionaryTag extends  TagSupport  {

@Override 重写 doStartTag 和 doEndTag 方法
  public int doStartTag() throws JspException {
// 这里可以添加 customerService 的获取方式
    List<Customer> list=customerService.getDataCustomer(paramVal);
if (list != null&&list.size()>0) {
for (Customer customer : list) {
optionstr.append("<option value='");
optionstr.append(customer.getCustomerID());
optionstr.append("'");
if(!StringUtil.isNullValue(sqlDefSelField)){
   if(sqlDefSelVal.equalsIgnoreCase  (customer.getCustomerID     ())){
optionstr.append(" selected ");
}
}
optionstr.append(">");
optionstr.append(StringUtil.Html(customer.getCustomerName()));
           optionstr.append("</option>");

}
return super.doStartTag();
}

@Override
public int doEndTag() throws JspException {

try {
pageContext.getOut().print(optionstr);
optionstr.delete(0,optionstr.length());
} catch (Exception err) {
}
return super.doEndTag();
}
  在对应的spring 配置文件里面配置相关属性注入:
<bean class="com.hmf.mis.crm.dao.CustomerDaoImpl" id="customerDao">
<property name="sqlMap" ref="sqlClient"></property>
</bean>

<bean class="com.hmf.mis.crm.service.CustomerServiceImpl" id="customerService">
<property name="customerDao" ref="customerDao"></property>
</bean>
配置 dataDic.tld 文件:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE taglib PUBLIC "-//Sun Microsystems,
Inc.//DTD JSP Tag Library 1.1//EN"
"http://java.sun.com/j2ee/dtds/web-jsptaglibrary_1_1.dtd">
<taglib>
<tlibversion>1.2</tlibversion>
<jspversion>1.1</jspversion>
<shortname>dataDic</shortname>
<tag>
<name>options</name> <tagclass>com.hmf.mis.framework.base.Taglib.XDataDictionaryTag</tagclass>
</tag>
</taglib>

页面调用:
Jsp页面先加上标签的引用:
<%@ taglib prefix="dataDic" uri="/WEB-INF/dataDic.tld" %>
对应的调用:      <SELECT>
       <dataDic:options selectedKeyValue=""  optionType="customerList"  count="" >
       </dataDic:options>
     </SELECT>
完成后数据字典就已经开发完成了。

小结:
在框架集成中使用自定义标签并且存在和数据库相互时,如何获取数据库链接对象是个问题,可能的解决方案:
直接使用jdbc方式访问数据库。
这个方式会导系统对数据库的链接管理的紊乱,框架不能管理相关事务。数据库安全问题也得不到保障,每一个标签的调用都会对创建数据库链接,数据库压力比较大,并且不利于应用的移植。显然这样的方式早被废弃。
通过配置文件 直接获取spring 的 ApplicationContext 对象
ApplicationContext ac = new FileSystemXmlApplicationContext("applicationContext.xml");
这样的做法屏蔽了第一种出现的所有问题,但是每次调用方法时都会重新生成一个上下文对象。内存一下就会被消耗殆尽。 并且违背了spring 管理对象的方式。

最简单的方式就是直接获取请求中的对象,从对象中获取上下文信息,从而得到数据库和相关对象的应用。很显然,sun 的程序员也会帮我们处理这个问题的,在
TagSupport 类中,
ApplicationContext ctx = WebApplicationContextUtils.getWebApplicationContext(pageContext.getServletContext());
CustomerService customerService = (CustomerService)ctx.getBean("customerService");
pageContext 方便的提供了这样的入口给我们。
这便是上文customerService 的获取方式
当然 你也可以使用 BodyTagSupport  来实现你的自定义标签。BodyTagSupport 继承了TagSupport , 在spring 3.0 以上的版本中提供了
NamespaceHandler和BeanDefinitionParser 实现自定义标签。








分享到:
评论

相关推荐

    JSP自定义标签实现数据字典

    本篇文章将深入探讨如何实现JSP自定义标签来处理数据字典。 首先,我们需要理解JSP自定义标签的工作原理。自定义标签是由Java类实现的,这些类通常继承自`javax.servlet.jsp.tagext.TagSupport`或`javax.servlet....

    公司内部自定义标签的使用

    JSP自定义标签通常由两部分组成:标签处理类(Tag Handler)和标签库描述文件(TLD, Tag Library Descriptor)。标签处理类实现了自定义逻辑,而TLD文件则定义了标签的属性、行为以及与处理类的关联。在公司内部,...

    自定义jsp标签jar

    spring-webmvc-3.0.5.RELEASE.jar jsp-api-2.1.jar 教程:http://blog.csdn.net/yjqyyjw/article/details/51840751

    Struts2 自定义下拉框Tag标签

    -- 从数据字典检出一个option列表 --&gt; &lt;name&gt;OptionDictionary &lt;tag-class&gt;com.itmyhome.DictionaryOptionTag&lt;/tag-class&gt; &lt;body-content&gt;empty &lt;name&gt;index &lt;!-- 字段索引名 --&gt; &lt;required&gt;true &lt;!-- 是否...

    jeecgUI标签文档

    其UI标签库是一套在JSP页面中使用的自定义标签集合,极大地简化了前端界面的开发工作。 1. BaseTag(样式表和JS引入标签) BaseTag标签用于引入JEECG开发平台需要的CSS样式表和JavaScript文件,是构建UI界面的基础...

    毕业论文jsp1601培训教育网站ssh.doc

    JSP的核心概念包括JSP指令、脚本元素、JSP表达式、JSP动作和自定义标签。在本文中,JSP被用来创建用户界面,处理用户请求并返回响应。 2. **MYSQL数据库**:MySQL是一种开源、关系型数据库管理系统,广泛应用于web...

    毕业论文jsp1062自行车租赁sqlserver.doc

    JSP提供了模板文本、脚本元素、指令标签和自定义标签等功能,方便网页的创建和维护。 3. **SQL Server 2005数据库**:SQL Server是由微软开发的关系型数据库管理系统,2005版本提供了一套完整的数据管理和分析工具...

    jspCHM 帮助文档*3

    - **自定义标签**:允许开发者创建自己的标签库,提高代码复用和可读性。 - **Servlet与JSP的关系**:JSP最终会被编译成Servlet,两者都是Java Web应用的重要组成部分。 - **MVC设计模式**:在JSP应用中,JSP通常...

    快速开发框架完整版J2EE代码

    内容管理:多站点管理,文章发布等,自带一套完整的JSP自定义标签。 消息推送:平台集成极光推送api、邮件发送、短信发送。 web通信:集成websocket,前端自带一个聊天室。 导出功能:excel导出与word导出。 统计...

    frameworkset开发手册

    - **自定义标签库**:提供了一系列强大的JSP标签,用于展示页面树型结构数据、分页列表数据、详细信息等,还包括字典标签、抽屉标签、右键菜单标签等。这些标签与系统的安全控制框架紧密结合,便于开发者在标签接口...

    基于SSM+jsp的二手交易平台源码数据库文档.zip

    5. **数据库文档**:数据库文档通常包括数据库设计(ER图、表结构、字段说明)、SQL脚本以及数据字典。这部分内容对于理解系统的数据存储和业务逻辑至关重要。 6. **毕业设计**:此项目可能包含需求分析、系统设计...

    3.内置组件的应用1

    在Java或JSP中,可以方便地使用这些方法获取并显示字典数据,如`DictUtils.getDictLabel()`和`DictUtils.getDictValue()`。 5. **功能权限控制**: 功能权限控制确保了对系统功能的访问和操作符合权限策略。使用`@...

    jeesite内置组件的应用

    DictUtils类提供了一系列操作字典数据的方法,这些方法可以帮助开发者快速地在Java代码或者JSP页面中获取系统字典的相关信息。 ##### 根据类型和值获取字典标签 - Java文件中获取:`DictUtils.getDictLabel(String...

    java学籍管理系统毕业设计答辩PPT

    - JSP标签(Tag Libraries)允许自定义扩展,如JSTL(JavaServer Pages Standard Tag Library)用于控制流程和数据处理。 3. **系统开发流程**: - 可行性分析:评估项目的必要性、技术可行性、经济性和法律合规...

    基于Java Web+ssm+jsp的学生宿舍管理系统源码数据库文档.zip

    10. **文档**:项目中包含的数据库文档可能是ER图、数据字典、DDL脚本等,帮助理解数据库结构和关系。 总之,这个项目涵盖了Java Web开发的多个方面,从后端逻辑处理、数据库设计到前端展示,再到移动端接口,是一...

    J2EE软件工程师全部培训课程总结

    - **JSP高级特性**:学习自定义标签、EL表达式、JSTL标签库等高级功能,提升Web开发效率。 #### 六、MVC框架:Struts与JSF - **Struts框架**:理解Struts的工作原理,掌握其标签库、国际化和异常处理机制。 - **...

    J2EE开发全程实录

    Web开发章节讲解了标记语言的基础知识,以及自定义标记库的开发,如Tag接口的生命周期,以及开发自定义的hello和flash标记,帮助开发者更好地理解JSP和自定义标签库的应用。 案例系统需求部分,作者设计了一个基础...

    JAVA知识点

    在JSP页面中引入自定义标签库的方式如下: ```xml &lt;jsp-config&gt; &lt;taglib-uri&gt;/tags/c-1_0-rt &lt;taglib-location&gt;/WEB-INF/tlds/c-1_0-rt.tld &lt;/jsp-config&gt; ``` 其中,`taglib-uri`是标签库的URI,而`taglib-...

Global site tag (gtag.js) - Google Analytics