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;
}
}
这个写得比较差,懒得改了,已经可以用了。