• j2ee [ 自定义MVC实现增删改查分页 ]


    1.配置文件 

    • web.xml文件 
    1. <?xml version="1.0" encoding="UTF-8"?>
    2. <web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
    3. xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    4. xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd"
    5. version="4.0">
    6. <!--配置中央控制器-->
    7. <servlet>
    8. <servlet-name>ActionServlet</servlet-name>
    9. <servlet-class>com.zking.mvc.framework.ActionServlet</servlet-class>
    10. <!--设置config配置文件-->
    11. <init-param>
    12. <param-name>config</param-name>
    13. <param-value>/config.xml</param-value>
    14. </init-param>
    15. </servlet>
    16. <servlet-mapping>
    17. <servlet-name>ActionServlet</servlet-name>
    18. <url-pattern>*.action</url-pattern>
    19. </servlet-mapping>
    20. <!--配置中文过滤器-->
    21. <filter>
    22. <filter-name>EncodingFilter</filter-name>
    23. <filter-class>com.jmh.utils.EncodingFilter</filter-class>
    24. </filter>
    25. <filter-mapping>
    26. <filter-name>EncodingFilter</filter-name>
    27. <url-pattern>/*</url-pattern>
    28. </filter-mapping>
    29. </web-app>
    •  z.xml文件(自定义标签)
    1. <!DOCTYPE taglib
    2. PUBLIC "-//Sun Microsystems, Inc.//DTD JSP Tag Library 1.2//EN"
    3. "http://java.sun.com/dtd/web-jsptaglibrary_1_2.dtd">
    4. <!-- 标签库描述符 -->
    5. <taglib xmlns="http://java.sun.com/JSP/TagLibraryDescriptor">
    6. <tlib-version>1.0</tlib-version>
    7. <jsp-version>1.2</jsp-version>
    8. <short-name>Simple Tags</short-name>
    9. <uri>/zking</uri>
    10. <tag>
    11. <name>page</name>
    12. <tag-class>com.jmh.utils.PageTag</tag-class>
    13. <body-content>empty</body-content>
    14. <attribute>
    15. <name>pageBean</name>
    16. <required>true</required>
    17. <rtexprvalue>true</rtexprvalue>
    18. </attribute>
    19. </tag>
    20. </taglib>
    •  config.xml文件(务必和src包放在一块儿)
    1. <?xml version="1.0" encoding="UTF-8"?>
    2. <!-- 根目录 -->
    3. <config>
    4. <!-- 第一个action标签 -->
    5. <!--indexAction-->
    6. <action path="/indexAction" type="com.jmh.action.IndexAction">
    7. <forward name="failed" path="/add.jsp" redirect="false" />
    8. <forward name="success" path="/add.jsp" redirect="true" />
    9. </action>
    10. <!--userAction-->
    11. <action path="/userAction" type="com.jmh.action.UserAction">
    12. <forward name="failed" path="/add.jsp" redirect="false" />
    13. <forward name="success" path="/add.jsp" redirect="true" />
    14. </action>
    15. <!--bookAction-->
    16. <action path="/bookAction" type="com.jmh.action.BookAction">
    17. <!--跳转主页使用转发(查询全部、模糊查询)-->
    18. <forward name="list" path="/listBook.jsp" redirect="false" />
    19. <!--跳转查询全部功能使用重定向(删除)-->
    20. <forward name="success" path="/bookAction.action?methodName=listBook" redirect="true" />
    21. <!--跳转查看单个页面使用转发(查看单个)-->
    22. <forward name="load" path="/loadBook.jsp" redirect="false" />
    23. <!--跳转查看编辑页面使用转发(编辑书本信息)-->
    24. <forward name="edit" path="/editBook.jsp" redirect="false" />
    25. <!--跳转绑定数据的功能(编辑书本成功之后)-->
    26. <forward name="update" path="/bookAction.action?methodName=listBook" redirect="true" />
    27. </action>
    28. </config>

     2.实体类

    • Book.java
    1. package com.jmh.entity;
    2. import java.io.Serializable;
    3. /**
    4. * 书本对象
    5. */
    6. public class Book implements Serializable {
    7. private Integer book_id;//书本编号
    8. private String book_name;//书本名称
    9. private float price;//书本价格
    10. public Book(Integer book_id, String book_name, float price) {
    11. this.book_id = book_id;
    12. this.book_name = book_name;
    13. this.price = price;
    14. }
    15. public Book() {
    16. }
    17. public Integer getBook_id() {
    18. return book_id;
    19. }
    20. public String getBook_name() {
    21. return book_name;
    22. }
    23. public float getPrice() {
    24. return price;
    25. }
    26. public void setBook_id(Integer book_id) {
    27. this.book_id = book_id;
    28. }
    29. public void setBook_name(String book_name) {
    30. this.book_name = book_name;
    31. }
    32. public void setPrice(float price) {
    33. this.price = price;
    34. }
    35. @Override
    36. public String toString() {
    37. return "Book{" +
    38. "book_id=" + book_id +
    39. ", book_name='" + book_name + '\'' +
    40. ", price=" + price +
    41. '}';
    42. }
    43. }

     3.dao类

    • BookDao.java 
    1. package com.jmh.dao;
    2. import com.jmh.base.BaseDao;
    3. import com.jmh.entity.Book;
    4. import com.jmh.utils.CommonUtils;
    5. import com.jmh.utils.PageBean;
    6. import com.jmh.utils.StringUtils;
    7. import java.sql.ResultSet;
    8. import java.sql.SQLException;
    9. import java.util.List;
    10. public class BookDao extends BaseDao<Book> {
    11. /**
    12. * 分页查询的方法
    13. * @param b 书本对象
    14. * @param pb 工具类
    15. * @return 结果集合
    16. */
    17. public List<Book> listBook(Book b, PageBean pb){
    18. //普通查询语句
    19. String sql="select book_id,book_name,price from tb_book where 1=1";
    20. //符合模糊查询语句
    21. if(StringUtils.isNotBlank(b.getBook_name())){//书本名称不等于空
    22. sql+=" and book_name like '%"+b.getBook_name()+"%' ";
    23. }
    24. //返回===调用父类的查询方法
    25. return this.executeQuery(sql, pb, new CallBack() {
    26. @Override
    27. public List forEachRs(ResultSet rs) throws SQLException {
    28. return CommonUtils.toList(rs,Book.class);
    29. }
    30. });
    31. }
    32. /**
    33. * 新增书本方法
    34. * @param b 书本对象
    35. */
    36. public void insertBook(Book b){
    37. //编写增加书本的sql语句
    38. String sql="insert into tb_book " +
    39. "(book_name,price) values(?,?)";
    40. this.executeUpdate(sql,new Object[]{
    41. b.getBook_name(),
    42. b.getPrice()
    43. });
    44. }
    45. /**
    46. * 根据书本编号删除的方法
    47. * @param b 书本对象
    48. */
    49. public void deleteBook(Book b){
    50. //编写根据书本编号删除的sql语句
    51. String sql="delete from tb_book where book_id=?";
    52. this.executeUpdate(sql,new Object[]{
    53. b.getBook_id()
    54. });
    55. }
    56. /**
    57. * 根据书本编号编辑书本
    58. * @param b 书本编号
    59. */
    60. public void updateBook(Book b){
    61. //编写根据书本编号编辑书本的sql语句
    62. String sql="update tb_book set book_name=?,price=? where book_id=?";
    63. this.executeUpdate(sql,new Object[]{
    64. b.getBook_name(),
    65. b.getPrice(),
    66. b.getBook_id()
    67. });
    68. }
    69. /**
    70. * 根据书本编号查询书本单个信息
    71. * @param b 书本信息
    72. * @return 书本单个信息
    73. */
    74. public Book loadBook(Book b){
    75. //编写根据书本编号查询书本信息的sql语句
    76. String sql="select book_id,book_name,price from tb_book where book_id="+b.getBook_id();
    77. List<Book> listBook= this.executeQuery(sql, null, new CallBack() {
    78. @Override
    79. public List forEachRs(ResultSet rs) throws SQLException {
    80. return CommonUtils.toList(rs,Book.class);
    81. }
    82. });
    83. return listBook.get(0);
    84. }
    85. }

     4.base类

    • BaseDao.java 
    1. package com.jmh.base;
    2. import java.sql.*;
    3. import java.util.List;
    4. import com.jmh.entity.Book;
    5. import com.jmh.utils.DBHelper;
    6. import com.jmh.utils.PageBean;
    7. import com.jmh.utils.StringUtils;
    8. public class BaseDao<K> {
    9. /**
    10. * 回调函数 用于遍历rs结果集
    11. * @author Administrator
    12. *
    13. * @param <T>
    14. */
    15. public static interface CallBack<T> {
    16. public List<T> forEachRs(ResultSet rs) throws SQLException;
    17. }
    18. //带有分页的模糊查询方法
    19. public List<K> executeQuery(String sql,PageBean pageBean,CallBack callBack){
    20. Connection conn = null;
    21. PreparedStatement pst = null;
    22. ResultSet rs = null;
    23. try {
    24. conn = DBHelper.getConnection();
    25. //查询总记录数
    26. if(null!=pageBean && pageBean.isPagination()) {
    27. String countSql = this.getCountSql(sql);
    28. pst = conn.prepareStatement(countSql);
    29. rs = pst.executeQuery();
    30. if(rs.next()) {
    31. Object obj = rs.getInt(1);
    32. pageBean.setTotal(obj.toString());
    33. }
    34. DBHelper.close(null, pst, rs);
    35. }
    36. if(null!=pageBean && pageBean.isPagination()) {
    37. sql = this.getPageSql(sql,pageBean);
    38. }
    39. pst = conn.prepareStatement(sql);
    40. rs = pst.executeQuery();
    41. return callBack.forEachRs(rs);
    42. } catch (Exception e) {
    43. throw new RuntimeException(e);
    44. }finally {
    45. DBHelper.close(conn, pst, rs);
    46. }
    47. }
    48. /**
    49. * 得到总记录数的sql
    50. * @param sql
    51. * @return
    52. */
    53. private String getCountSql(String sql) {
    54. String countSql = "SELECT COUNT(*) FROM ("+sql+") t1";
    55. return countSql;
    56. }
    57. /**
    58. * 得到分页的sql
    59. * @param sql
    60. * @param pageBean
    61. * @return
    62. */
    63. private String getPageSql(String sql,PageBean pageBean) {
    64. String pageSql = sql + " LIMIT "+pageBean.getStartIndex()+","+pageBean.getRows();
    65. return pageSql;
    66. }
    67. /**
    68. * 方便增删改的方法
    69. * @param sql
    70. * @param params
    71. */
    72. public void executeUpdate(String sql,Object[] params) {
    73. Connection conn=null;
    74. PreparedStatement stmt=null;
    75. try {
    76. conn=DBHelper.getConnection();
    77. stmt=conn.prepareStatement(sql);
    78. ParameterMetaData metaData = stmt.getParameterMetaData();
    79. for (int i = 0; i < metaData.getParameterCount(); i++) {
    80. stmt.setObject(i+1, params[i]);
    81. }
    82. int i = stmt.executeUpdate();
    83. if(i<1)
    84. throw new RuntimeException("执行失败,影响行数为0!");
    85. } catch (Exception e) {
    86. e.printStackTrace();
    87. throw new RuntimeException(e);
    88. } finally {
    89. DBHelper.close(conn, stmt, null);
    90. }
    91. }
    92. }

     5.utils工具类

    • config.properties 
    1. #mysql
    2. driver=com.mysql.jdbc.Driver
    3. url=jdbc:mysql://localhost:3306/填写自己的数据库名称?useUnicode=true&characterEncoding=UTF-8
    4. user=填写自己的数据库登录账号
    5. pwd=填写自己的数据库登录密码
    •  DBHelper.java(这里不需要动,如果数据库有更改,更改上方文件即可)
    1. package com.jmh.utils;
    2. import java.io.InputStream;
    3. import java.sql.Connection;
    4. import java.sql.DriverManager;
    5. import java.sql.ResultSet;
    6. import java.sql.SQLException;
    7. import java.sql.Statement;
    8. import java.util.Properties;
    9. /**
    10. * 提供了一组获得或关闭数据库对象的方法
    11. *
    12. */
    13. public class DBHelper {
    14. private static String driver;
    15. private static String url;
    16. private static String user;
    17. private static String password;
    18. static {// 静态块执行一次,加载 驱动一次
    19. try {
    20. InputStream is = DBHelper.class
    21. .getResourceAsStream("config.properties");
    22. Properties properties = new Properties();
    23. properties.load(is);
    24. driver = properties.getProperty("driver");
    25. url = properties.getProperty("url");
    26. user = properties.getProperty("user");
    27. password = properties.getProperty("pwd");
    28. Class.forName(driver);
    29. } catch (Exception e) {
    30. e.printStackTrace();
    31. throw new RuntimeException(e);
    32. }
    33. }
    34. /**
    35. * 获得数据连接对象
    36. *
    37. * @return
    38. */
    39. public static Connection getConnection() {
    40. try {
    41. Connection conn = DriverManager.getConnection(url, user, password);
    42. return conn;
    43. } catch (SQLException e) {
    44. e.printStackTrace();
    45. throw new RuntimeException(e);
    46. }
    47. }
    48. public static void close(ResultSet rs) {
    49. if (null != rs) {
    50. try {
    51. rs.close();
    52. } catch (SQLException e) {
    53. e.printStackTrace();
    54. throw new RuntimeException(e);
    55. }
    56. }
    57. }
    58. public static void close(Statement stmt) {
    59. if (null != stmt) {
    60. try {
    61. stmt.close();
    62. } catch (SQLException e) {
    63. e.printStackTrace();
    64. throw new RuntimeException(e);
    65. }
    66. }
    67. }
    68. public static void close(Connection conn) {
    69. if (null != conn) {
    70. try {
    71. conn.close();
    72. } catch (SQLException e) {
    73. e.printStackTrace();
    74. throw new RuntimeException(e);
    75. }
    76. }
    77. }
    78. public static void close(Connection conn, Statement stmt, ResultSet rs) {
    79. close(rs);
    80. close(stmt);
    81. close(conn);
    82. }
    83. public static boolean isOracle() {
    84. return "oracle.jdbc.driver.OracleDriver".equals(driver);
    85. }
    86. public static boolean isSQLServer() {
    87. return "com.microsoft.sqlserver.jdbc.SQLServerDriver".equals(driver);
    88. }
    89. public static boolean isMysql() {
    90. return "com.mysql.jdbc.Driver".equals(driver);
    91. }
    92. public static void main(String[] args) {
    93. Connection conn = DBHelper.getConnection();
    94. DBHelper.close(conn);
    95. System.out.println("isOracle:" + isOracle());
    96. System.out.println("isSQLServer:" + isSQLServer());
    97. System.out.println("isMysql:" + isMysql());
    98. System.out.println("数据库连接(关闭)成功");
    99. }
    100. }
    •  CommonUtils.java
    1. package com.jmh.utils;
    2. import java.lang.reflect.Field;
    3. import java.lang.reflect.Method;
    4. import java.sql.ResultSet;
    5. import java.sql.ResultSetMetaData;
    6. import java.util.ArrayList;
    7. import java.util.HashMap;
    8. import java.util.List;
    9. import java.util.Map;
    10. import javax.servlet.http.HttpServletResponse;
    11. public class CommonUtils {
    12. /**
    13. * 根据ResultSet数据集,利用反射机制动态赋值并返回List<T>
    14. * @param rs ResultSet数据集
    15. * @param clazz 实体类对象
    16. * @return 返回List实体集合
    17. * @throws Exception
    18. */
    19. public static <T> List<T> toList(ResultSet rs,Class<T> clazz){
    20. //定义实体集合
    21. List<T> lst=new ArrayList<T>();
    22. try {
    23. //获取ResultSet的metadata列信息
    24. ResultSetMetaData metaData = rs.getMetaData();
    25. //获取对象属性集合
    26. Field[] fields=clazz.getDeclaredFields();
    27. //循环ResultSet
    28. while(rs.next()) {
    29. //反射机制实例化
    30. T obj = clazz.newInstance();
    31. for (int i = 0; i < metaData.getColumnCount(); i++) {
    32. //获取列名
    33. String columnName=metaData.getColumnLabel(i+1).toUpperCase();
    34. for (Field field : fields) {
    35. //判断属性名与列名是否相同
    36. if(field.getName().toUpperCase().equals(columnName)) {
    37. //获取属性对应的set方法名,方法名首字母大写
    38. String methodName="set"+field.getName().substring(0, 1).toUpperCase()+field.getName().substring(1);
    39. //获取属性对应的set方法
    40. Method method = obj.getClass().getDeclaredMethod(methodName, field.getType());
    41. //设置访问权限
    42. method.setAccessible(true);
    43. //执行set方法,将数据存储到对象中的相应属性中
    44. method.invoke(obj, rs.getObject(columnName));
    45. break;
    46. }
    47. }
    48. }
    49. lst.add(obj);
    50. }
    51. }catch(Exception e) {
    52. e.printStackTrace();
    53. }
    54. return lst;
    55. }
    56. /**
    57. * 多表查询时返回结果集,利用反射机制赋值
    58. * @param rs
    59. * @return 返回List<Map<String,Object>>
    60. * @throws Exception
    61. */
    62. public static List<Map<String,Object>> toList(ResultSet rs){
    63. //定义实体集合
    64. List<Map<String,Object>> lst=new ArrayList<Map<String,Object>>();
    65. try {
    66. //获取ResultSet的metadata列信息
    67. ResultSetMetaData metaData = rs.getMetaData();
    68. Map<String,Object> set=null;
    69. while(rs.next()) {
    70. set=new HashMap<String,Object>();
    71. for (int i = 0; i < metaData.getColumnCount(); i++) {
    72. String columnName=metaData.getColumnLabel(i+1);
    73. set.put(columnName, rs.getObject(columnName));
    74. }
    75. lst.add(set);
    76. }
    77. }catch(Exception e) {
    78. e.printStackTrace();
    79. }
    80. return lst;
    81. }
    82. }
    •  EncodingFilter.java
    1. package com.jmh.utils;
    2. import java.io.IOException;
    3. import java.util.Iterator;
    4. import java.util.Map;
    5. import java.util.Set;
    6. import javax.servlet.Filter;
    7. import javax.servlet.FilterChain;
    8. import javax.servlet.FilterConfig;
    9. import javax.servlet.ServletException;
    10. import javax.servlet.ServletRequest;
    11. import javax.servlet.ServletResponse;
    12. import javax.servlet.http.HttpServletRequest;
    13. import javax.servlet.http.HttpServletResponse;
    14. /**
    15. * 中文乱码处理
    16. *
    17. */
    18. public class EncodingFilter implements Filter {
    19. private String encoding = "UTF-8";// 默认字符集
    20. public EncodingFilter() {
    21. super();
    22. }
    23. public void destroy() {
    24. }
    25. public void doFilter(ServletRequest request, ServletResponse response,
    26. FilterChain chain) throws IOException, ServletException {
    27. HttpServletRequest req = (HttpServletRequest) request;
    28. HttpServletResponse res = (HttpServletResponse) response;
    29. // 中文处理必须放到 chain.doFilter(request, response)方法前面
    30. res.setContentType("text/html;charset=" + this.encoding);
    31. if (req.getMethod().equalsIgnoreCase("post")) {
    32. req.setCharacterEncoding(this.encoding);
    33. } else {
    34. Map map = req.getParameterMap();// 保存所有参数名=参数值(数组)的Map集合
    35. Set set = map.keySet();// 取出所有参数名
    36. Iterator it = set.iterator();
    37. while (it.hasNext()) {
    38. String name = (String) it.next();
    39. String[] values = (String[]) map.get(name);// 取出参数值[注:参数值为一个数组]
    40. for (int i = 0; i < values.length; i++) {
    41. values[i] = new String(values[i].getBytes("ISO-8859-1"),
    42. this.encoding);
    43. }
    44. }
    45. }
    46. chain.doFilter(request, response);
    47. }
    48. public void init(FilterConfig filterConfig) throws ServletException {
    49. String s = filterConfig.getInitParameter("encoding");// 读取web.xml文件中配置的字符集
    50. if (null != s && !s.trim().equals("")) {
    51. this.encoding = s.trim();
    52. }
    53. }
    54. }
    •  PageBean.java
    1. package com.jmh.utils;
    2. import java.util.Map;
    3. import javax.servlet.http.HttpServletRequest;
    4. public class PageBean {
    5. private Integer page =1; //页码 默认为1
    6. private Integer rows = 10; //页大小 默认为10
    7. private Integer total =0; // 总记录数
    8. private boolean pagination=true; //是否分页 默认为false
    9. private String url; //请求路径
    10. private Map<String,String[]> map; //请求的参数集合
    11. public PageBean() {
    12. super();
    13. }
    14. public Integer getPage() {
    15. return page;
    16. }
    17. public void setPage(Integer page) {
    18. this.page = page;
    19. }
    20. public Integer getRows() {
    21. return rows;
    22. }
    23. public void setRows(Integer rows) {
    24. this.rows = rows;
    25. }
    26. public Integer getTotal() {
    27. return total;
    28. }
    29. public void setTotal(Integer total) {
    30. this.total = total;
    31. }
    32. public void setTotal(String total) {
    33. this.total = Integer.parseInt(total);
    34. }
    35. public boolean isPagination() {
    36. return pagination;
    37. }
    38. public void setPagination(boolean pagination) {
    39. this.pagination = pagination;
    40. }
    41. // @Override
    42. // public String toString() {
    43. // return "PageBean [page=" + page + ", rows=" + rows + ", total=" + total + ", pagination=" + pagination + "]";
    44. // }
    45. public int getStartIndex() {
    46. return (this.page-1)*this.rows;
    47. }
    48. @Override
    49. public String toString() {
    50. return "PageBean [page=" + page + ", rows=" + rows + ", total=" + total + ", pagination=" + pagination
    51. + ", url=" + url + ", map=" + map + "]";
    52. }
    53. public String getUrl() {
    54. return url;
    55. }
    56. public void setUrl(String url) {
    57. this.url = url;
    58. }
    59. public Map<String, String[]> getMap() {
    60. return map;
    61. }
    62. public void setMap(Map<String, String[]> map) {
    63. this.map = map;
    64. }
    65. public void setPage(String page) {
    66. if(null!=page && !"".equals(page)) {
    67. this.page = Integer.parseInt(page);
    68. }
    69. }
    70. public void setRows(String rows) {
    71. if(null!=rows && !"".equals(rows)) {
    72. this.rows = Integer.parseInt(rows);
    73. }
    74. }
    75. public void setPagination(String pagination) {
    76. if(null!=pagination && !"".equals(pagination)) {
    77. this.pagination = Boolean.parseBoolean(pagination);
    78. }
    79. }
    80. /**
    81. * 对pageBean初始化
    82. * @param req
    83. */
    84. public void setRequest(HttpServletRequest req) {
    85. //获取页面上的参数
    86. String page = req.getParameter("page");
    87. String rows = req.getParameter("rows");
    88. String pagination = req.getParameter("pagination");
    89. //设置参数
    90. this.setPage(page);
    91. this.setRows(rows);
    92. this.setPagination(pagination);
    93. this.setUrl(req.getRequestURI());
    94. this.setMap(req.getParameterMap());
    95. }
    96. /**
    97. * 得到最大的页码数
    98. * @return
    99. */
    100. public int getMaxPage() {
    101. int maxPage = this.total / this.rows;
    102. if(this.total%this.rows!=0) {
    103. maxPage++;
    104. }
    105. return maxPage;
    106. }
    107. /**
    108. * 得到下一页的页码
    109. * @return
    110. */
    111. public int getNextPage() {
    112. int nextPage = this.page+1;
    113. if(nextPage>=getMaxPage()) {
    114. nextPage = getMaxPage();
    115. }
    116. return nextPage;
    117. }
    118. /**
    119. * 得到上一页的页码
    120. * @return
    121. */
    122. public int getPreviousPage() {
    123. int previousPage = this.page -1;
    124. if(previousPage<1) {
    125. previousPage =1;
    126. }
    127. return previousPage;
    128. }
    129. }
    •  PageTag.java
    1. package com.jmh.utils;
    2. import java.io.IOException;
    3. import java.util.Map;
    4. import java.util.Map.Entry;
    5. import java.util.Set;
    6. import javax.servlet.jsp.JspException;
    7. import javax.servlet.jsp.JspWriter;
    8. import javax.servlet.jsp.tagext.BodyTagSupport;
    9. import com.jmh.utils.PageBean;
    10. public class PageTag extends BodyTagSupport {
    11. private PageBean pageBean;
    12. public PageTag() {
    13. super();
    14. }
    15. public PageBean getPageBean() {
    16. return pageBean;
    17. }
    18. public void setPageBean(PageBean pageBean) {
    19. this.pageBean = pageBean;
    20. }
    21. @Override
    22. public int doStartTag() throws JspException {
    23. JspWriter out = pageContext.getOut();
    24. try {
    25. out.println(toHtml());
    26. } catch (Exception e) {
    27. throw new RuntimeException(e);
    28. }
    29. return super.doStartTag();
    30. }
    31. private String toHtml() {
    32. //pageBean为空或者 不分页
    33. if(null==pageBean || !pageBean.isPagination()) {
    34. return "";
    35. }
    36. StringBuilder sb = new StringBuilder();
    37. //拼接form表单
    38. /*<form action="${pageBean.url}" method="post" id="pageBeanForm">
    39. <!-- 设置页码 -->
    40. <input type="hidden" name="page"/>
    41. <!-- 参数列表 -->
    42. </form>*/
    43. sb.append("<form action=\""+pageBean.getUrl()+"\" method=\"post\" id=\"pageBeanForm\">");
    44. sb.append("<input type=\"hidden\" name=\"page\"/>");
    45. //参数列表
    46. Map<String, String[]> map = pageBean.getMap();
    47. String name =null;
    48. String[] values = null;
    49. // bookName = '不短命' hobby="篮球" hobby="足球" page="2"
    50. Set<Entry<String, String[]>> entrySet = map.entrySet();
    51. for (Entry<String, String[]> entry : entrySet) {
    52. name = entry.getKey();
    53. if(name.equals("page")) {
    54. continue;
    55. }
    56. values = entry.getValue();
    57. for (String value : values) {
    58. //<input type="hidden" name="bookName" valu="不短命"/>
    59. //<input type="hidden" name="hobby" valu="篮球"/>
    60. //<input type="hidden" name="hobby" valu="足球"/>
    61. sb.append("<input type=\"hidden\" name=\""+name+"\" value=\""+value+"\"/>");
    62. }
    63. }
    64. sb.append("</form>");
    65. //拼接div部分
    66. /*<div style="width:100%;text-align: right;">
    67. 第几页/总共多少页,共多少条记录
    68. <a href="javascript:gotoPage(1)">首页</a>&nbsp;
    69. <a href="javascript:gotoPage(${pageBean.getPreviousPage()})">上一页</a>&nbsp;
    70. <a href="javascript:gotoPage(${pageBean.getNextPage()})">下一页</a>&nbsp;
    71. <a href="javascript:gotoPage(${pageBean.getMaxPage()})">末页</a>&nbsp;
    72. <input type="text" id="skipPage" style="width:30px;"/>&nbsp;
    73. <a href="javascript:skipPage(${pageBean.getMaxPage()})">GO</a>
    74. </div>*/
    75. sb.append("<div style=\"width:100%;text-align: right;\">");
    76. sb.append("第"+pageBean.getPage()+"页/总共"+pageBean.getMaxPage()+"页,共"+pageBean.getTotal()+"条记录 ");
    77. //首页 上一页
    78. if(pageBean.getPage()!=1) {
    79. sb.append("<a href=\"javascript:gotoPage(1)\">首页</a>&nbsp;\r\n" +
    80. " <a href=\"javascript:gotoPage("+pageBean.getPreviousPage()+")\">上一页</a>&nbsp;");
    81. }else {
    82. sb.append("<a>首页</a>&nbsp;<a>上一页</a>&nbsp;");
    83. }
    84. //末页 下一页
    85. if(pageBean.getPage()!=pageBean.getMaxPage()) {
    86. sb.append("<a href=\"javascript:gotoPage("+pageBean.getNextPage()+")\">下一页</a>&nbsp;\r\n" +
    87. " <a href=\"javascript:gotoPage("+pageBean.getMaxPage()+")\">末页</a>&nbsp;");
    88. }else {
    89. sb.append("<a>下一页</a>&nbsp;<a>末页</a>&nbsp;");
    90. }
    91. //跳转页
    92. sb.append("<input type=\"text\" id=\"skipPage\" style=\"width:30px;\"/>&nbsp;");
    93. sb.append("<a href=\"javascript:skipPage()\">GO</a>");
    94. sb.append("</div>");
    95. //拼接js
    96. /*<script type="text/javascript">
    97. function gotoPage(page) {
    98. document.getElementById('pageBeanForm').page.value=page;
    99. document.getElementById('pageBeanForm').submit();
    100. }
    101. function skipPage(maxPage) {
    102. var page = document.getElementById('skipPage').value;
    103. if(isNaN(page) || page<1 || page>maxPage){
    104. alert("请输入1-"+maxPage+"的数字");
    105. return false;
    106. }
    107. gotoPage(page);
    108. }
    109. </script>*/
    110. sb.append("<script type=\"text/javascript\">\r\n" +
    111. " function gotoPage(page) {\r\n" +
    112. " document.getElementById('pageBeanForm').page.value=page;\r\n" +
    113. " document.getElementById('pageBeanForm').submit();\r\n" +
    114. " }\r\n" +
    115. " function skipPage() {\r\n" +
    116. " var page = document.getElementById('skipPage').value;\r\n" +
    117. " if(isNaN(page) || page<1 || page>"+pageBean.getMaxPage()+"){\r\n" +
    118. " alert(\"请输入1-\"+"+pageBean.getMaxPage()+"+\"的数字\");\r\n" +
    119. " return false;\r\n" +
    120. " }\r\n" +
    121. " gotoPage(page);\r\n" +
    122. " }\r\n" +
    123. "\r\n" +
    124. "</script>");
    125. return sb.toString();
    126. }
    127. }
    •  StringUtils.java
    1. package com.jmh.utils;
    2. public class StringUtils {
    3. // 私有的构造方法,保护此类不能在外部实例化
    4. private StringUtils() {
    5. }
    6. /**
    7. * 如果字符串等于null或去空格后等于"",则返回true,否则返回false
    8. *
    9. * @param s
    10. * @return
    11. */
    12. public static boolean isBlank(String s) {
    13. boolean b = false;
    14. if (null == s || s.trim().equals("")) {
    15. b = true;
    16. }
    17. return b;
    18. }
    19. /**
    20. * 如果字符串不等于null或去空格后不等于"",则返回true,否则返回false
    21. *
    22. * @param s
    23. * @return
    24. */
    25. public static boolean isNotBlank(String s) {
    26. return !isBlank(s);
    27. }
    28. }

     除了还有一些核心代码作者导成了jar方便使用,如有需要私我即可.然后。。。就到这里啦?

     

     

    效果图如下:                                         


     

     

     

     

  • 相关阅读:
    SUSE 助力某头部基金公司 PaaS 平台建设
    Aandroid studio编码最实用的快捷键
    cuDNN安装成功
    c#中工厂模式详解
    指针数组和数组指针
    矩池云快速安装torch-sparse、torch-geometric等包
    Mybatis的二级缓存 (ehcache方式)
    Linux ip 和 port 查看
    【设计模式】 - 创建者模式 - 原型模式
    ORACLE修改service_name服务名
  • 原文地址:https://blog.csdn.net/m0_63300795/article/details/125632037