关于自定义标签的使用 在我开始接触的时候 只是对其基本用法有了一个大概的了解 ,但是真到实际应用中我发现,那可不能同日而语 ,就目前我做的应用是做一个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=''> </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范围中的全部代码了
写的有点乱 但是还能看清逻辑
有什么建议欢迎提出呢 会灰常感激的
分享到:
相关推荐
在ThinkPHP中,自定义标签(Tag Lib)是一种强大的特性,允许开发者扩展模板引擎的功能,使其更符合项目需求。下面将详细解释如何在ThinkPHP 3.0版本中实现自定义标签及其使用方法。 1. **自定义标签的作用** ...
本文将深入探讨Struts2自定义标签的实现机制、优点以及如何在实际项目中进行应用。 一、Struts2自定义标签的概念 自定义标签是JSP的一种扩展,允许开发者创建自己的HTML标签,这些标签可以封装复杂的业务逻辑,使得...
最后,关于标签的性能考虑,应避免在自定义标签中执行耗时操作,因为这会影响模板的渲染速度。尽可能地将计算和逻辑操作交给后端处理,只在标签中处理简单的数据转换和呈现。 总的来说,自定义FreeMarker标签是提高...
- `WEB-INF`:此目录通常包含应用的配置文件,如web.xml和自定义标签的TLD文件。`mytags.tld`可能会放在这个目录的子目录`WEB-INF/tags`下,遵循JSP规范的约定。 - `js`:这个目录可能包含了JavaScript文件,与...
"jsp 2.0自定义标签.doc"文件很可能包含了一个关于如何创建和使用自定义标签的详细教程。它可能涵盖了从创建TLD文件,编写标签处理类,到在JSP页面上实际使用自定义标签的全过程。同时,这个文档可能会提供一些实际...
Struts 是一个基于 Model-View-Controller (MVC) 设计模式的 Java Web 开发框架,它极大地简化了创建功能丰富的、动态 web 应用...在实际开发中,根据具体业务需求,可以扩展更多的自定义标签来满足多样化的应用场景。
本篇学习笔记将深入探讨JSP自定义标签的相关概念、创建方法以及实际应用。 一、概述 1.1 使用简单标签机制 JSP自定义标签提供了类似HTML标签的语法结构,通过自定义标签,开发者可以封装复杂的Java代码,使得页面...
在JavaServer Pages (JSP) 技术中,自定义标签是提高代码可重用性和...在分页和下拉框绑定值的场景中,自定义标签的应用能简化页面逻辑,使代码更易于理解和维护。结合JSTL,我们可以构建出更加灵活、高效的JSP应用。
在Java Web开发中,自定义标签(Custom Tag)是一种强大的工具,它...在实际项目中,常见的应用包括表单处理、数据展示、国际化等复杂场景,通过自定义标签可以有效地封装这些功能,使得代码结构更清晰,更易于维护。
介绍自定义标签的运行原理以及标签可以干哪些事情,简介传统标签与自定义标签的区别
自定义标签极大地增强了Freemarker的灵活性,使得模板语言可以更好地适应各种应用场景。在阅读《freemarker 自定义标签 总结》这篇博文时,可以更深入地探讨这些话题,获取更多实用技巧和示例。
HTML自定义标签是HTML5引入的一个重要特性,它允许开发者根据需求定义自己的元素,从而更好地组织和结构化页面内容,提高代码的...在实践中,务必考虑浏览器兼容性、语义化和性能优化,以确保自定义标签的有效应用。
在实际应用中,自定义标签可以用于各种场景,例如: - 数据格式化和展示,如日期、货币等。 - 用户界面组件,如分页、下拉框、树形结构等。 - 复杂的业务逻辑,如权限控制、数据验证等。 学习和使用Java自定义标签...
通过分析这个示例,我们可以学习如何在实际项目中应用自定义标签,以提高模板的可维护性和复用性。 总的来说,理解并掌握Freemarker的自定义标签,不仅可以使模板设计更加灵活,还能帮助我们更好地组织和管理视图层...
本案例通过JavaScript来实现自定义标签的功能。具体而言,它通过遍历文档中的内容,将自定义的标签转换为标准的HTML标签,并应用相应的样式。下面我们将详细介绍其实现细节。 #### 自定义标签代码解析 ```...
本项目提供了一个用于分页的自定义标签,适用于那些需要在网页上进行数据分页展示的应用。 首先,我们要理解什么是JSP自定义标签。在JSP中,自定义标签是通过TLD(Tag Library Descriptor)文件定义的,它允许...
- Spring Web Flow、JSF等框架也提供了自定义标签的机制,进一步丰富了Web2.0开发中的自定义标签应用。 通过自定义标签,Web2.0应用可以更加灵活地构建用户界面,提供定制化的交互体验。同时,这也有助于提升...
在Java Web开发中,自定义标签...通过熟练掌握自定义标签的创建和使用,开发者可以构建更加高效、可维护的Web应用。阅读“自定义标签.pdf”和“page”文件,以及“第10章 自定义标签”将进一步加深对这一主题的理解。
在李宁老师的《Java Web开发速成宝典》中,这部分内容深入浅出地介绍了如何设计和实现自定义标签,以及如何在实际项目中有效地应用它们。 一、自定义标签的背景与意义 在传统的JSP开发中,我们经常使用JSP内置标签...
在本篇文章中,我们将深入探讨自定义标签的原理、实现方式以及其在实际项目中的应用。 1. **自定义标签的概念** 自定义标签是JSP的一部分,它们扩展了JSP的功能,提供了一种将业务逻辑或常见操作封装为可重用组件...