SSH自定义标签

 一、标签处理类:package cn.conris.sys.form;

import java.io.IOException;
import java.util.Enumeration;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.jsp.JspException;
import javax.servlet.jsp.JspWriter;
import javax.servlet.jsp.tagext.SimpleTagSupport;
import javax.servlet.jsp.tagext.TagSupport;

import cn.conris.sys.utils.PropertyUtil;

public class PageTag  extends TagSupport {
         private int pageSize = PropertyUtil.getPageSize(); // 每页要显示的记录数
        private int pageNo = PropertyUtil.getPageNumber(); // 页号
        private int recordCount; // 总记录数
        private String url; // 目的地URL

        public void setPageSize(int pageSize) {
            this.pageSize = pageSize;
        }
        public void setPageNo(int pageNo) {
            this.pageNo = pageNo;
        }
        public void setRecordCount(int recordCount) {
            this.recordCount = recordCount;
        }
        public void setUrl(String url) {
            this.url = url;
        }
        // 主要的逻辑
        @Override
        public int doStartTag() throws JspException {
            if(recordCount == 0){
                return super.doStartTag();
            }

            // 总页数
            int pageCount = (recordCount + pageSize - 1) / pageSize;
            // 页号越界处理
            if (pageNo > pageCount) {
                pageNo = pageCount;
            }
            if (pageNo < 1) {
                pageNo = 1;
            }

            StringBuilder sb = new StringBuilder();

            sb.append("<form name=‘pageController‘ id=‘pageController‘ action=‘‘ method=‘post‘>&nbsp")
              .append("<input type=‘hidden‘ id=‘pageNo‘ name=‘pageNo‘ value=‘" + pageNo + "‘ />&nbsp");

            //------------------------------------ 获取所有請求中的参数
            HttpServletRequest request = (HttpServletRequest) pageContext
                    .getRequest();
            Enumeration<String> enumeration = request.getParameterNames();
            String name = null;
            String value = null;
            //把请求中的所有参数当作隐藏表单域在页面中写出)
            while (enumeration.hasMoreElements()) {
                name =  enumeration.nextElement();
                value = request.getParameter(name);
                // 去除页号
                if (name.equals("pageNo")) {
                    if (null != value && !"".equals(value)) {
                        pageNo = Integer.parseInt(value);
                    }
                    continue;
                }
                sb.append("<input type=‘hidden‘ name=‘")
                  .append(name)
                  .append("‘ value=‘")
                  .append(value)
                  .append("‘/>&nbsp");
            }
            //----------------------------------------------------

            sb.append(" 共" + pageCount + "页,&nbsp")
              .append("当前第" + pageNo + "页 &nbsp");

            if (pageNo == 1) {
                sb.append("首页");
                sb.append(" ");
                sb.append("上一页&nbsp");
            } else {
                sb.append("<a href=‘#‘ onclick=‘turnOverPage(1)‘>首页</a>&nbsp");
                sb.append(" ");
                sb.append("<a href=‘#‘ onclick=‘turnOverPage(")
                        .append((pageNo - 1)).append(")‘>上一页</a>&nbsp");
            }
            sb.append(" ");
            if (pageNo == pageCount) {
                sb.append("下一页");
                sb.append(" ");
                sb.append("尾页&nbsp");
            } else {
                sb.append("<a href=‘#‘ onclick=‘turnOverPage(")
                        .append((pageNo + 1)).append(")‘>下一页</a>&nbsp");
                sb.append(" ");
                sb.append("<a href=‘#‘ onclick=‘turnOverPage(").append(pageCount)
                        .append(")‘>尾页</a>&nbsp");
            }

            sb.append(" 跳到<select style=‘width:80px;‘ onChange=‘turnOverPage(this.value)‘>&nbsp");
            for (int i = 1; i <= pageCount; i++) {
                if (i == pageNo) {
                    sb.append("  <option  value=‘")
                      .append(i)
                      .append("‘ selected=‘selected‘>第")
                      .append(i)
                      .append("页</option>&nbsp");
                } else {
                    sb.append("  <option  value=‘")
                      .append(i)
                      .append("‘>第")
                      .append(i)
                      .append("页</option>&nbsp");
                }
            }
            sb.append("</select>&nbsp");
            sb.append(" &nbsp");
            sb.append("</form>&nbsp");

            // 生成提交表单的JS
            sb.append("<script language=‘javascript‘>");
           // sb.append("  //翻页函数/t/n");
            sb.append("  function turnOverPage(no){");
            sb.append("    var form = document.pageController;");
           // sb.append("    //页号越界处理");
            sb.append("    if(no").append(">").append(pageCount).append(") {");
            sb.append("        no=").append(pageCount).append(";");
            sb.append("    }");
            sb.append("    if(no").append("< 1){");
            sb.append("        no=1;");
            sb.append("    }");
            sb.append("    form.").append("pageNo").append(".value=no;");
            sb.append("    form.action=‘").append(url).append("‘;");
            sb.append("    form.submit();");
            sb.append("  }");
            sb.append("</script>");

            try {
                pageContext.getOut().println(sb.toString());
            } catch (IOException e) {
                e.printStackTrace();
            }

            return super.doStartTag();
        }
}二、标签库描述文件:
<?xml version="1.0" encoding="UTF-8"?>
<taglib version="2.0" xmlns="http://java.sun.com/xml/ns/j2ee"
 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee web-jsptaglibrary_2_0.xsd">
 <tlib-version>2.0</tlib-version>
 <short-name>my</short-name>
 <uri>http://conris/ModelSystem</uri>
 <tag>
    <description>通用分页标签</description>
    <name>pager</name>
    <tag-class>cn.conris.sys.form.PageTag</tag-class>
    <body-content>empty</body-content>
    <attribute>
      <name>pageNo</name>
      <required>true</required>
      <rtexprvalue>true</rtexprvalue>
    </attribute>
    <attribute>
      <name>recordCount</name>
      <required>true</required>
      <rtexprvalue>true</rtexprvalue>
    </attribute>
    <attribute>
      <name>pageSize</name>
      <required>true</required>
      <rtexprvalue>true</rtexprvalue>
    </attribute>
    <attribute>
      <name>url</name>
      <required>true</required>
      <rtexprvalue>true</rtexprvalue>
    </attribute>
  </tag>
</taglib>

三\配置web.xml



 <!-- 配置自定义标签 -->
  <jsp-config>
    <taglib>
        <taglib-uri>/mytaglib</taglib-uri>
        <taglib-location>/WEB-INF/classes/pageTag.tld</taglib-location>
    </taglib>
  </jsp-config>

四\把pageSize写在了配置文件里面,这样可以灵活的修改配置。

pageSize=5
pageNumber=1

读取配置文件的工具类

package cn.conris.sys.utils;

import java.io.IOException;
import java.io.InputStream;
import java.util.Properties;

public class PropertyUtil {
    private static Properties p = new Properties();
    private static InputStream inputStream = null;
    static {
        inputStream = PropertyUtil.class
                .getResourceAsStream("/page.properties");
        try {
            p.load(inputStream);
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

    public static int getPageSize() {
        return Integer.parseInt(p.getProperty("pageSize"));
    }

    public static int getPageNumber() {
        return Integer.parseInt(p.getProperty("pageNumber"));
    }

    public static void main(String[] args) {
        System.out.println(getPageSize());
    }

}

五,action处理类

public String listmap() {
        String name = extendAttribute.getName();
        String type = extendAttribute.getType();
        List<ExtendAttribute> list = null;
        Map<String, String> maps = new HashMap<String, String>();
        if (name != null && !name.equals("")) {
            maps.put("name", name);
        }
        if (type != null && !type.equals("")) {
            maps.put("type", type);
        }

        list = extendAttributeService.find(maps);

        String pageNoStr = request.getParameter("pageNo");
        int pageNo = PropertyUtil.getPageNumber();
        if (pageNoStr != null && !pageNoStr.equals("")) {
            pageNo = Integer.parseInt(pageNoStr);
        }

        int recordCount = list.size();
        int pageSize = PropertyUtil.getPageSize();
        int startNo = (pageNo - 1) * pageSize;
        List<ExtendAttribute> result = null;
        if (recordCount <= pageSize) {
            result = list;
        } else {
            if(startNo + pageSize>recordCount){
                result = list.subList(startNo, recordCount);
            }else{
                result = list.subList(startNo, startNo + pageSize);
            }
        }

        request.setAttribute("recordCount", recordCount);
        request.setAttribute("pageNo", pageNo);
        request.setAttribute("pageSize", pageSize);
        request.setAttribute("list", result);
        // request.setAttribute("list", list);
        return "success";
    }
 

SSH自定义标签

时间: 2024-10-17 03:09:35

SSH自定义标签的相关文章

SSH自定义分页标签

本文参考文章:http://blog.csdn.net/qjyong/article/details/3240303 一.标签处理类: package cn.conris.sys.form; import java.io.IOException; import java.util.Enumeration; import javax.servlet.http.HttpServletRequest; import javax.servlet.jsp.JspException; import java

【Jsp】JSP自定义标签与MODEL1、MODEL2标准

在JSP2.0之后支持自定义标签,现在一般都是jsp2.4的版本了,所以无须考虑版本的问题.直接使用就可以了.虽然一般开发的过程中,很少会自己定义JSP标签,但是通过一个JSP自定义标签的学习,可以从一定程度上理解struts等框架把好好的JSP标签改得面目全非的机理.正如Jquery本质是Javascript一样,SSH实际上Jsp.其实也没有什么,一个简单的例子就能够完全说明如何在JSP中自定义的标签. 通过自定义标签就能够达到所谓的MODEL2标准,在展示层VIEW给别人看的网页中不得出现

JSP自定义标签

假设 向浏览器输出当前客户的IP地址 ,我们现在可以这样写 <% //获取当前用户的IP地址 String ip=request.getRemoteHost(); out.print("当前用户的IP地址是:"+ip); %> 但我们现在为了要在jsp页面尽量减少java代码,这个时候我们可以向前面学标签一样,自己来定义一个标签,通过调用标签来达到实现显示客户端的ip地址. 首先第一步我们要创建一个普通的java类,继承SimpleTagSupport类,叫标签处理器类(用

Javaweb学习笔记6—EL表达式与JSTL及自定义标签

 前几天博客被黑了,导致博客登陆不上,把前几天应该发的东西的东西重新发一遍 今天来讲javaweb的第六阶段学习. EL表达式与JSTL及自定义标签是对上篇文章介绍的JSP的扩展,不能说是很重要的东西,但是也要了解. 老规矩,首先先用一张思维导图来展现今天的博客内容. ps:我的思维是用的xMind画的,如果你对我的思维导图感兴趣并且想看到你们跟详细的备注信息,请点击下载 另外:如果图看不清的话请右击---在新窗口中打开会清楚很多. 一.EL表达式 1,EL简介 Expression Lan

JSP自定义标签渲染时报Illegal to flush错误

javax.servlet.ServletException:Illegal to flush within a custom tag 此错误是因为在JSP页面中的某一个自定义标签的doStartTag或doEndTag中用了out.flush,而其他的自定义标签没有导致.可以去掉out.flush. JSP自定义标签渲染时报Illegal to flush错误,布布扣,bubuko.com

java jsp自定义标签

自定义标签开发步骤 1)编写一个普通的java类,继承SimpleTagSupport类,叫标签处理器类 package gz.itcast; import java.io.IOException; import javax.servlet.jsp.JspException; import javax.servlet.jsp.tagext.SimpleTagSupport; public class iftag extends SimpleTagSupport { private boolean

zTree更新自定义标签&gt;&gt;&gt;

zTree>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> x 本来想自己敲一个zTree的例子的>>> 但是一想zTree文档做的这么好,直接拷贝过来一个得了... 哈哈>>> <!DOCTYPE html> <html> <head> <

自定义标签

1 如果在jsp页面中写java代码 是很不合适的 而且坏处很多像这样: <%@page import="java.util.ArrayList"%><%@page import="java.util.List"%><%@page import="com.atguigu.javaweb.Customer"%><%@ page language="java" contentType=&q

自定义标签-自定义注解

首先是4个自定义注解类StaticResourceType.java public enum StaticResourceType { LESS,CSS,JS} StaticResource.java @Target({ElementType.FIELD})@Retention(RetentionPolicy.RUNTIME)public @interface StaticResource { StaticResourceType type(); String path(); Dependenc