package com.toolkit.taglibs;
import java.net.URLEncoder;
import java.util.Iterator;
import java.util.Map;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.jsp.JspException;
import javax.servlet.jsp.JspWriter;
import javax.servlet.jsp.tagext.Tag;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.apache.struts2.components.Component;
import org.apache.struts2.views.jsp.ComponentTagSupport;
import com.opensymphony.xwork2.util.ValueStack;
/**
*
* @author JohnCheng
* @version 1.0.0
* @since 2010-01-19
*/
public class SortTag extends ComponentTagSupport {
/**
*
*/
private static final long serialVersionUID = -4137098453204513199L;
public static Log log = LogFactory.getLog(SortTag.class);
private final static String DESC = "desc";
private final static String ASC = "asc";
private String field;
private String action = "";
private boolean isAsc = false;
private boolean matched = false;
private JspWriter writer;
public int doStartTag() throws JspException {
StringBuffer sb = new StringBuffer(action);//current page
sb.append("?field=");
sb.append( field );
sb.append("&sort=");
String sort = pageContext.getRequest().getParameter("sort");
isAsc = ASC.equalsIgnoreCase(sort);
sb.append(isAsc ? DESC : ASC);
matched = field.equalsIgnoreCase( pageContext.getRequest().getParameter("field") );
Map parameters = pageContext.getRequest().getParameterMap();
Iterator iterator = parameters.keySet().iterator();
HttpServletRequest req = (HttpServletRequest)pageContext.getRequest();
try{
while (iterator.hasNext()) {
String key = (String) iterator.next();
if("field".equals(key) || "sort".equals(key) || "random".equals(key)){
continue;
}
sb.append("&")
.append(key)
.append("=")
.append(URLEncoder.encode( ((String[])parameters.get(key))[0],"UTF-8"));
}
}catch(Exception ex){
log.error(ex);
}
writer = pageContext.getOut();
try {
writer.write("<a href=\""+sb.toString() + "\" style=\"text-decoration: none;color: #FFFFFF; font-size: 12px;font-weight: bold;\" title=\"点击排序\">" );
}catch(Exception ex ){
log.error(ex);
}
return Tag.EVAL_BODY_INCLUDE;
}
@Override
public int doEndTag() throws JspException {
String root = ((HttpServletRequest)pageContext.getRequest()).getContextPath();
try{
if(matched){
if(isAsc){
this.writer.write(" <img border='0' src='"+root+"/images/asc.gif'/>");
}else{
writer.write(" <img border='0' src='"+root+"/images/desc.gif'/>");
}
}
writer.write("</a>");
}catch(Exception ex){
log.error(ex);
}
return Tag.EVAL_BODY_INCLUDE;
}
public String getAction() {
return action;
}
public void setAction(String action) {
this.action = action;
}
public String getField() {
return field;
}
public void setField(String field) {
this.field = field;
}
@Override
public Component getBean(ValueStack arg0, HttpServletRequest arg1,
HttpServletResponse arg2) {
return null;
}
}
这个写得比较差,懒得改了,已经可以用了。
分享到:
相关推荐
- 数据绑定:比如,一个自定义标签可以用来显示数据库查询结果,处理分页和排序等复杂逻辑。 - 用户界面组件:例如,创建一个日期选择器标签,封装JavaScript和CSS,使日期选择功能易于使用和维护。 - 权限控制:...
### 自定义标签学习笔记 #### 一、什么是自定义标签? 自定义标签是JSP(Java Server Pages)中的一种功能,允许开发者创建可重用的组件。这些组件封装了特定的功能,可以在不同的JSP页面中复用,从而提高开发效率...
京东作为国内知名的电商平台,其商品评价系统独具特色,特别是自定义标签功能,为用户提供了一种直观、简洁的方式来理解和评估商品质量。本教程将深入探讨如何仿照京东的商品评价体系,实现自定义标签功能。 一、...
"Dojo 自定义后台排序"是一个关于如何利用Dojo框架实现后台数据排序的专题。Dojo是一个强大的JavaScript库,提供了丰富的功能和工具,帮助开发者构建富交互式的Web应用。在本主题中,我们将深入探讨Dojo的排序机制,...
在Swift编程环境中,自定义选择标签是一种常见的UI需求,它能提供用户友好的交互体验,让用户可以方便地通过拖拽来排序标签,并且能够轻松选中或取消选中标签。这个场景通常涉及到自定义控件的创建,以及手势识别和...
本文将深入探讨如何实现TabLayout的标签拖动选择和重新排序功能,以达到类似某些视频网站首页导航栏的效果。 首先,我们需要在布局XML文件中添加TabLayout,并配置好相关的属性。例如: ```xml android:id="@+id...
3. **在JSP页面中使用自定义标签**:在JSP页面中,通过`<%@ taglib %>`指令引入自定义标签库,然后就可以像使用其他JSTL标签一样使用自定义分页标签。例如: ```jsp ${totalItems}" itemsPerPage="10" /> ``` 4. ...
- 排序:用户可能需要根据列头进行排序,自定义标签需要处理这些事件并重新排序数据。 - 编辑和删除:如果需要提供编辑和删除功能,标签需要提供交互接口,如按钮点击事件,然后调用后台服务来执行相应的操作。 ...
这里,`sourceData`是包含待排序数据的数组,`label: 'name'`表示数据对象中的哪个字段作为展示的标签,`titles`定义了穿梭框两侧的标题,`v-model`用于双向绑定选中的数据,而`@change`事件会在数据发生变化时触发...
Ruby-ActsAsTaggableOn 是一个非常流行的Rails插件,用于在动态环境中实现自定义标签功能。这个插件使得在你的Rails应用中添加标签系统变得简单高效,它提供了灵活的接口来管理和操作标签数据。 首先,让我们深入...
这可能包括设置标签的样式、颜色、字体,以及是否允许用户重新排序标签等。 6. **性能优化**:当有大量子窗口时,需要考虑性能问题。例如,只在当前活动的子窗口上绘制,以减少资源消耗。 7. **数据交换**:在MDI...
3. **选择自定义序列**:在弹出的选项窗口中找到并选择“自定义序列”标签页。 4. **输入自定义序列**:在自定义序列列表右侧的输入框中粘贴刚刚复制的序列。 5. **添加序列**:点击“添加”按钮将新序列保存到...
DisplayTag是个很好的jsp标签,目前最新版本为1.2,支持了自定义分页,解决了之前版本每次查询都把全部数据查出的低效率做法。但是DisplayTag默认是通过url传参,以及分页导航不灵活给人们带来了不少麻烦。鉴于此...
特点 在上个table标签的基础上修改了部分代码,支持firefox. 新增数据展现控件以便定制更加复杂的table. 1、JSP2.0标准自定义标签 2、支持数据库后台翻页 3、支持排序 4、支持firfox 4、使用...
类似于新浪图片上传的效果。可以手机摄像头和相册多张选择图片。相册图片实现拖动拖动效果。照片的删除,以及自定义标签的选择效果。 下载地址https://github.com/liuhuan3344/photo
易语言,作为一款中国本土开发的简单易学的编程工具,也提供了处理数组的能力,包括对自定义类型的数组进行排序。本篇将深入探讨易语言中自定义类型数组排序的原理、实现方法以及源码解析。 易语言的核心理念是“易...
3. **样式定制**:允许开发者自定义标签的外观,如颜色、大小、边框等,以符合网站的风格。 4. **拖放排序**:用户可以通过拖放操作改变标签的顺序。 5. **管理功能**:提供删除或编辑已有标签的功能。 6. **数据...
在传统的数据窗口中,用户通常需要编写特定的脚本来实现字段的排序功能,但通过使用这个自定义排序控件,用户只需点击数据窗口中的字段名,系统就能自动进行升序或降序排序,极大地提高了开发效率和用户体验。...
安装了Office Tab后能够轻松实现给Office添加标签页效果,它并不是一个独立的应用程序,而是一款Office的扩展插件,支持Office 2003、2007、2013实现多窗口标签式浏览,还支持自定义标签外观、标签显示位置、标签...