`
hezhaomeng
  • 浏览: 9350 次
  • 性别: Icon_minigender_1
文章分类
社区版块
存档分类
最新评论

关于自定义标签的应用

    博客分类:
  • web
 
阅读更多

关于自定义标签的使用 在我开始接触的时候 只是对其基本用法有了一个大概的了解 ,但是真到实际应用中我发现,那可不能同日而语 ,就目前我做的应用是做一个select性质的标签,可以实现对字典数据表中数据的显示 根据 字典数据中的标示列名称 还可以设置默认选择项是哪一个,总体实现类似<select><code:codesDetail type="显示类型"selectid="${默认选中的id号}"/></select>这样一种方式去生成select列表

下面是代码 我贴下

(1)这个TagCode 就是标签的Action类

package org.aninggo.webapp.action.tag;

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

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

import com.opensymphony.xwork2.util.ValueStack;

public class TagCode extends ComponentTagSupport {

 /**
  *
  */
 private static final long serialVersionUID = 1L;
 private String type;
 private Long selectid;
 public Component getBean(ValueStack arg0, HttpServletRequest arg1,
   HttpServletResponse arg2) {
 
  // TODO Auto-generated method stub
  return new CodeBean(arg0);
 }

 

 protected void populateParams() {
  // TODO Auto-generated method stub
  super.populateParams();
  CodeBean code=(CodeBean)component;
     code.setType(type);
     code.setSelectid(selectid);
     code.setContext(ServletActionContext.getServletContext());
  
 }

 

 public String getType() {
  return type;
 }

 

 public void setType(String type) {
  this.type = type;
 }

 

 public Long getSelectid() {
  return selectid;
 }

 

 public void setSelectid(Long selectid) {
  this.selectid = selectid;
 }
 

}

(注意)我继承的是ComponentTagSupport 这个类

接下来

(2)就是那个真正处理标签的业务类了 它继承了Compent这个类

package org.aninggo.webapp.action.tag;

import java.io.IOException;
import java.io.Writer;
import java.util.List;
import java.util.Map;

import javax.servlet.ServletContext;

import org.aninggo.model.codes.Codes;

import org.apache.struts2.components.Component;

import com.opensymphony.xwork2.util.ValueStack;

public class CodeBean extends Component {

 private List<Codes> codes;
 private ServletContext context;
 private String type;
    private Long selectid;
 public CodeBean(ValueStack stack) {
  super(stack);
  // TODO Auto-generated constructor stub
 }

 public String getType() {
  return type;
 }

 public void setType(String type) {
  this.type = type;
 }

 

 public boolean start(Writer writer) {
   boolean result = super.start(writer);
  boolean flag = true;
  StringBuilder str = new StringBuilder();
  if (flag) {
   if (!"".equals(type) && null != type) {

    Map<String, List<Codes>> map = (Map<String, List<Codes>>) context
      .getAttribute("basecode");//这个数据就是从ServletContext中取出来的数据
    if (!map.isEmpty()) {
     codes = (List<Codes>) map.get(type);
     str.append("<option value=''>&nbsp;&nbsp;</option>");
     if(codes!=null){
     if (codes.size() > 0) {
     // str.append("<select>");
      
      for (Codes c : codes) {
       
                           if(selectid.equals(c.getId())){
                            str.append("<option value=" + c.getId() + "selected=\"selected\">"
               + c.getXxdmhy() + "</option>");

                           }else{
                            str.append("<option value=" + c.getId() + ">"
            + c.getXxdmhy() + "</option>");

                           }
       
      }
      //str.append("</select>");
     }
     }
    }
   } else {
    flag = false;
   }
  }
  try {
   writer.write(str.toString());
  } catch (IOException e) {
   // TODO Auto-generated catch block
   e.printStackTrace();
  }

  return result;
 }

 public List<Codes> getCodes() {
  return codes;
 }

 public void setCodes(List<Codes> codes) {
  this.codes = codes;
 }

 public ServletContext getContext() {
  return context;
 }

 public void setContext(ServletContext context) {
  this.context = context;
 }

 public Long getSelectid() {
  return selectid;
 }

 public void setSelectid(Long selectid) {
  this.selectid = selectid;
 }

 

}
其实里面的业务逻辑很简单 的

但对于这样的一个字典数据的输出

最重要的还有一个就是字典表中的数据的加载

要是服务器启动的时候就把数据放入一个容器类中

我把它放在了ServletContext中了


那个保存数据的类我也贴下吧

package org.aninggo.webapp.action.servlet;

import java.util.HashMap;
import java.util.List;
import java.util.Map;

import javax.servlet.ServletContext;

import org.aninggo.model.codes.Codes;
import org.aninggo.service.codes.CodesManager;
import org.aninggo.webapp.action.BaseAction;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;

@Controller("info")
public class Info extends BaseAction{
/**
  *
  */
 private static final long serialVersionUID = 1L;

@Autowired
private CodesManager codesManager;
 public static ServletContext serverContxt;
 private static Map<String,List<Codes>> map=new HashMap<String, List<Codes>>();;

 public   void exe( ){
 List<Codes> list;
 List<Codes> listchid;
  list=codesManager.findparent();
  
  for(Codes code:list){ 
   Long id=code.getId();
   listchid=codesManager.findchild(id.intValue());
   map.put(code.getCname().trim(),listchid);
   
  }
  
  serverContxt.setAttribute("basecode", map);
 }
 
 

}
主要是把字典表中的数据整理到map中 放到serverContxt范围中

最后要真正执行的类是一个servlet类 在启动服务器的时候就要运行它

package org.aninggo.webapp.action.servlet;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;

import org.springframework.web.context.WebApplicationContext;
import org.springframework.web.context.support.WebApplicationContextUtils;

public class ServerContxt extends HttpServlet {

 private Info info;
 private WebApplicationContext applicationContext;

 public void init() throws ServletException {
  Info.serverContxt = getServletContext();
  applicationContext = WebApplicationContextUtils
    .getWebApplicationContext(getServletContext());
  info = (Info) applicationContext.getBean("info");
  info.exe();
 }

}
这个就是一个完整的设置一个自定义标签 并且把它提前保存到一个servletcontext范围中的全部代码了

写的有点乱 但是还能看清逻辑

有什么建议欢迎提出呢 会灰常感激的

 

 

分享到:
评论

相关推荐

    tp自定义标签

    在ThinkPHP中,自定义标签(Tag Lib)是一种强大的特性,允许开发者扩展模板引擎的功能,使其更符合项目需求。下面将详细解释如何在ThinkPHP 3.0版本中实现自定义标签及其使用方法。 1. **自定义标签的作用** ...

    struts2 自定义标签

    本文将深入探讨Struts2自定义标签的实现机制、优点以及如何在实际项目中进行应用。 一、Struts2自定义标签的概念 自定义标签是JSP的一种扩展,允许开发者创建自己的HTML标签,这些标签可以封装复杂的业务逻辑,使得...

    freemarker 自定义freeMarker标签

    最后,关于标签的性能考虑,应避免在自定义标签中执行耗时操作,因为这会影响模板的渲染速度。尽可能地将计算和逻辑操作交给后端处理,只在标签中处理简单的数据转换和呈现。 总的来说,自定义FreeMarker标签是提高...

    jsp 自定义标签实例

    - `WEB-INF`:此目录通常包含应用的配置文件,如web.xml和自定义标签的TLD文件。`mytags.tld`可能会放在这个目录的子目录`WEB-INF/tags`下,遵循JSP规范的约定。 - `js`:这个目录可能包含了JavaScript文件,与...

    jsp2.0 自定义标签和自定标签函数

    "jsp 2.0自定义标签.doc"文件很可能包含了一个关于如何创建和使用自定义标签的详细教程。它可能涵盖了从创建TLD文件,编写标签处理类,到在JSP页面上实际使用自定义标签的全过程。同时,这个文档可能会提供一些实际...

    struts实现自定义标签

    Struts 是一个基于 Model-View-Controller (MVC) 设计模式的 Java Web 开发框架,它极大地简化了创建功能丰富的、动态 web 应用...在实际开发中,根据具体业务需求,可以扩展更多的自定义标签来满足多样化的应用场景。

    JSP自定义标签学习笔记

    本篇学习笔记将深入探讨JSP自定义标签的相关概念、创建方法以及实际应用。 一、概述 1.1 使用简单标签机制 JSP自定义标签提供了类似HTML标签的语法结构,通过自定义标签,开发者可以封装复杂的Java代码,使得页面...

    jsp 自定义标签的使用

    在JavaServer Pages (JSP) 技术中,自定义标签是提高代码可重用性和...在分页和下拉框绑定值的场景中,自定义标签的应用能简化页面逻辑,使代码更易于理解和维护。结合JSTL,我们可以构建出更加灵活、高效的JSP应用。

    关于自定义标签的开发说明

    在Java Web开发中,自定义标签(Custom Tag)是一种强大的工具,它...在实际项目中,常见的应用包括表单处理、数据展示、国际化等复杂场景,通过自定义标签可以有效地封装这些功能,使得代码结构更清晰,更易于维护。

    自定义标签原理和应用

    介绍自定义标签的运行原理以及标签可以干哪些事情,简介传统标签与自定义标签的区别

    freemark 自定义标签 总结

    自定义标签极大地增强了Freemarker的灵活性,使得模板语言可以更好地适应各种应用场景。在阅读《freemarker 自定义标签 总结》这篇博文时,可以更深入地探讨这些话题,获取更多实用技巧和示例。

    html自定义标签的使用

    HTML自定义标签是HTML5引入的一个重要特性,它允许开发者根据需求定义自己的元素,从而更好地组织和结构化页面内容,提高代码的...在实践中,务必考虑浏览器兼容性、语义化和性能优化,以确保自定义标签的有效应用。

    java自定义标签.......java自定义标签

    在实际应用中,自定义标签可以用于各种场景,例如: - 数据格式化和展示,如日期、货币等。 - 用户界面组件,如分页、下拉框、树形结构等。 - 复杂的业务逻辑,如权限控制、数据验证等。 学习和使用Java自定义标签...

    Freemarker 自定义标签 简单案例

    通过分析这个示例,我们可以学习如何在实际项目中应用自定义标签,以提高模板的可维护性和复用性。 总的来说,理解并掌握Freemarker的自定义标签,不仅可以使模板设计更加灵活,还能帮助我们更好地组织和管理视图层...

    用js实现自定义标签

    本案例通过JavaScript来实现自定义标签的功能。具体而言,它通过遍历文档中的内容,将自定义的标签转换为标准的HTML标签,并应用相应的样式。下面我们将详细介绍其实现细节。 #### 自定义标签代码解析 ```...

    一个用于分页的自定义标签

    本项目提供了一个用于分页的自定义标签,适用于那些需要在网页上进行数据分页展示的应用。 首先,我们要理解什么是JSP自定义标签。在JSP中,自定义标签是通过TLD(Tag Library Descriptor)文件定义的,它允许...

    Web2.0体系学习(自定义标签)

    - Spring Web Flow、JSF等框架也提供了自定义标签的机制,进一步丰富了Web2.0开发中的自定义标签应用。 通过自定义标签,Web2.0应用可以更加灵活地构建用户界面,提供定制化的交互体验。同时,这也有助于提升...

    自定义标签,标签实例,ppt

    在Java Web开发中,自定义标签...通过熟练掌握自定义标签的创建和使用,开发者可以构建更加高效、可维护的Web应用。阅读“自定义标签.pdf”和“page”文件,以及“第10章 自定义标签”将进一步加深对这一主题的理解。

    java web自定义标签的开发与应用

    在李宁老师的《Java Web开发速成宝典》中,这部分内容深入浅出地介绍了如何设计和实现自定义标签,以及如何在实际项目中有效地应用它们。 一、自定义标签的背景与意义 在传统的JSP开发中,我们经常使用JSP内置标签...

    自定义标签

    在本篇文章中,我们将深入探讨自定义标签的原理、实现方式以及其在实际项目中的应用。 1. **自定义标签的概念** 自定义标签是JSP的一部分,它们扩展了JSP的功能,提供了一种将业务逻辑或常见操作封装为可重用组件...

Global site tag (gtag.js) - Google Analytics