• SSH 分页收藏待看


    先是一个page的bean:
    Java代码 
    package com.leatherstore.other;  
     
    public class Page {  
     
        /** 是否有上一页 */  
        private boolean hasPrePage;  
         
        /** 是否有下一页 */  
        private boolean hasNextPage;  
             
        /** 每页的数量 */  
        private int everyPage;  
         
        /** 总页数 */  
        private int totalPage;  
             
        /** 当前页*/  
        private int currentPage;  
         
        /** 起始点 */  
        private int beginIndex;  
         
        /** 总记录数*/  
        private int totalCount;  
         
        /** 
    * @return totalCount 
    */  
    public int getTotalCount() {  
    return totalCount;  
    }  
     
    /** 
    * @param totalCount 要设置的 totalCount 
    */  
    public void setTotalCount(int totalCount) {  
    this.totalCount = totalCount;  
    }  
     
    /** The default constructor */  
        public Page(){  
             
        }  
         
        /** construct the page by everyPage 
         * @param everyPage 
         * */  
        public Page(int everyPage){  
            this.everyPage = everyPage;  
        }  
         
        /** The whole constructor */  
        public Page(boolean hasPrePage, boolean hasNextPage,   
                        int everyPage, int totalPage,  
                        int currentPage, int beginIndex,int totalCount) {  
            this.hasPrePage = hasPrePage;  
            this.hasNextPage = hasNextPage;  
            this.everyPage = everyPage;  
            this.totalPage = totalPage;  
            this.currentPage = currentPage;  
            this.beginIndex = beginIndex;  
            this.totalCount = totalCount;  
        }  
     
        /** 
         * @return 
         * Returns the beginIndex. 
         */  
        public int getBeginIndex() {  
            return beginIndex;  
        }  
         
        /** 
         * @param beginIndex 
         * The beginIndex to set. 
         */  
        public void setBeginIndex(int beginIndex) {  
            this.beginIndex = beginIndex;  
        }  
         
        /** 
         * @return 
         * Returns the currentPage. 
         */  
        public int getCurrentPage() {  
            return currentPage;  
        }  
         
        /** 
         * @param currentPage 
         * The currentPage to set. 
         */  
        public void setCurrentPage(int currentPage) {  
            this.currentPage = currentPage;  
        }  
         
        /** 
         * @return 
         * Returns the everyPage. 
         */  
        public int getEveryPage() {  
            return everyPage;  
        }  
         
        /** 
         * @param everyPage 
         * The everyPage to set. 
         */  
        public void setEveryPage(int everyPage) {  
            this.everyPage = everyPage;  
        }  
         
        /** 
         * @return 
         * Returns the hasNextPage. 
         */  
        public boolean getHasNextPage() {  
            return hasNextPage;  
        }  
         
        /** 
         * @param hasNextPage 
         * The hasNextPage to set. 
         */  
        public void setHasNextPage(boolean hasNextPage) {  
            this.hasNextPage = hasNextPage;  
        }  
         
        /** 
         * @return 
         * Returns the hasPrePage. 
         */  
        public boolean getHasPrePage() {  
            return hasPrePage;  
        }  
         
        /** 
         * @param hasPrePage 
         * The hasPrePage to set. 
         */  
        public void setHasPrePage(boolean hasPrePage) {  
            this.hasPrePage = hasPrePage;  
        }  
         
        /** 
         * @return Returns the totalPage. 
         * 
         */  
        public int getTotalPage() {  
            return totalPage;  
        }  
         
        /** 
         * @param totalPage 
         * The totalPage to set. 
         */  
        public void setTotalPage(int totalPage) {  
            this.totalPage = totalPage;  
        }  
    }  
    然后构建一个page的工厂PageUtil:  
    package com.leatherstore.other;  
     
    public class PageUtil {  
    /** 
    * Use the origin page to create a new page 

    * @param page 
    * @param totalRecords 
    * @return 
    */  
    public static Page createPage(Page page, int totalRecords) {  
    return createPage(page.getEveryPage(), page.getCurrentPage(),  
    totalRecords);  
    }  
     
    /** 
    * the basic page utils not including exception handler 

    * @param everyPage 
    * @param currentPage 
    * @param totalRecords 
    * @return page 
    */  
    public static Page createPage(int everyPage, int currentPage,  
    int totalRecords) {  
    everyPage = getEveryPage(everyPage);  
    currentPage = getCurrentPage(currentPage);  
    int beginIndex = getBeginIndex(everyPage, currentPage);  
    int totalPage = getTotalPage(everyPage, totalRecords);  
    boolean hasNextPage = hasNextPage(currentPage, totalPage);  
    boolean hasPrePage = hasPrePage(currentPage);  
     
    return new Page(hasPrePage, hasNextPage, everyPage, totalPage,  
    currentPage, beginIndex, totalRecords);  
    }  
     
    private static int getEveryPage(int everyPage) {  
    return everyPage == 0 ? 10 : everyPage;  
    }  
     
    private static int getCurrentPage(int currentPage) {  
    return currentPage == 0 ? 1 : currentPage;  
    }  
     
    private static int getBeginIndex(int everyPage, int currentPage) {  
    return (currentPage - 1) * everyPage;  
    }  
     
    private static int getTotalPage(int everyPage, int totalRecords) {  
    int totalPage = 0;  
     
    if (totalRecords % everyPage == 0)  
    totalPage = totalRecords / everyPage;  
    else  
    totalPage = totalRecords / everyPage + 1;  
     
    return totalPage;  
    }  
     
    private static boolean hasPrePage(int currentPage) {  
    return currentPage == 1 ? false : true;  
    }  
     
    private static boolean hasNextPage(int currentPage, int totalPage) {  
    return currentPage == totalPage || totalPage == 0 ? false : true;  
    }  
     
    }  
    然后建一个专用的bean:  
    package com.leatherstore.hibernate.domain;  
     
    import java.util.List;  
     
    import com.leatherstore.other.Page;  
     
    public class Result {  
    private Page page;  //分页信息  
    private List content;  //每页显示的集合  
    /** 
         * The default constructor 
         */  
        public Result() {  
            super();  
        }  
     
        /** 
         * The constructor using fields 
         * 
         * @param page 
         * @param content 
         */  
        public Result(Page page, List content) {  
            this.page = page;  
            this.content = content;  
        }  
     
        /** 
         * @return Returns the content. 
         */  
        public List getContent() {  
            return content;  
        }  
     
        /** 
         * @return Returns the page. 
         */  
        public Page getPage() {  
            return page;  
        }  
     
        /** 
         * @param content 
         *            The content to set. 
         */  
        public void setContent(List content) {  
            this.content = content;  
        }  
     
        /** 
         * @param page 
         *            The page to set. 
         */  
        public void setPage(Page page) {  
            this.page = page;  
        }  
    }  
     
    然后在数据访问层写两个方法:  
    ProductDAO:  
    public List getProductByPage(Page page);   
    public int getProductCount();  //返回数据的总数  
    ProductDAO的接口实现ProductDAOImpl:  
    //为了在spring里统一编程风格:我用的回调的方法  
    public List getProductByPage(final Page page) {  
    return this.getHibernateTemplate().executeFind(new HibernateCallback(){  
    public Object doInHibernate(Session session) throws HibernateException, SQLException {  
    Query query=session.createQuery("from Productinfo");  
    query.setFirstResult(page.getBeginIndex()); //hibernate分页的精髓   呵呵  
        query.setMaxResults(page.getEveryPage());  
        return query.list();  
    }  
    });  
    }  
     
    public int getProductCount() {  
    List list=this.getHibernateTemplate().find("select count(*) from Productinfo");  
    return ((Integer)list.iterator().next()).intValue();  
    }  
    然后是业务层:  
    IProduct:  
    public Result listProduct(Page page);  
    然后IProduct接口的实现:IProductImpl:  
    private ProductDAO productDAO;  
    public void setProductDAO(ProductDAO productDAO){  
    this.productDAO=productDAO;  
    }  
     
    public Result listProduct(Page page) {  
    int totalRecords = this.productDAO.getProductCount();  
    page = PageUtil.createPage(page, totalRecords);  
            List products = this.productDAO.getProductByPage(page);       
            return new Result(page, products);  
    }  
    然后再代理层:  
    ProductProxy:  
    IProduct pro=(IProduct)AppContext.getInstance().getappcontext().getBean("productServicewithTran");  
     
    public Result productlist(Page page){  
    try{  
    return pro.listProduct(page);  
    }catch(DataAccessException ex){  
    ex.printStackTrace();  
    return null;  
    }  
    }  
    呵呵 终于到productAction啦  
    显示前方法的代码  
    Page page = new Page();   //实例化一个page对象  
    page.setEveryPage(10);    //设置每页显示的条数  
    page.setCurrentPage(1);    //为第一页  
    Result result = pdp.productlist(page);  
    request.setAttribute("page", pageinfo);  
    request.setAttribute("productlist", list);  
    return mapping.findForward("showProduct");  
    接着就是jsp页面了  
    <logic:iterate id="product" name="productlist">  
    //中间迭代所要显示的数据  
    </logic:iterate>  
    <tr>  
        <td width="80" height="30">&nbsp;</td>  
        <logic:equal value="true" name="page" property="hasPrePage">  
        <td width="150" height="30"><div align="right"><a href="../product.do?method=showProductByTag&index=first& msg=${msg }">首页</a></div></td>  
        <td width="80" height="30"><div align="center"><a href="../product.do?method=showProductByTag&index=prew&pageno=${page.currentPage -1}&msg=${msg }">上一页</a></div></td>  
        </logic:equal>  
        <logic:notEqual value="true" name="page" property="hasPrePage">  
        <td width="150" height="30"><div align="right">首页</div></td>  
        <td width="80" height="30"><div align="center">上一页</div></td>  
        </logic:notEqual>  
        <logic:equal value="true" name="page" property="hasNextPage">  
        <td width="80" height="30"><div align="center"><a href="../product.do?method=showProductByTag&index=next&pageno=${page.currentPage +1 }&msg=${msg }">下一页</a></div></td>  
        <td width="80" height="30"><div align="center"><a href="../product.do?method=showProductByTag&index=end&pageno=${page.totalPage }&msg=${msg }">尾页</a></div></td>  
        </logic:equal>  
        <logic:notEqual value="true" name="page" property="hasNextPage">  
        <td width="80" height="30"><div align="center">下一页</div></td>  
        <td width="80" height="30"><div align="center">尾页</div></td>  
        </logic:notEqual>  
        <td height="30" colspan="3"><div align="center">页次${page.currentPage }/${page.totalPage }&nbsp;&nbsp;&nbsp;共${page.totalCount }条记录</div>      <div align="center"></div></td>  
      </tr>  
    可以显示相应的页面信息  
    然后productAction里面的showProductByTag代码如下:  
    Page page = new Page();  
    page.setEveryPage(10);  
    String pagemark = request.getParameter("goto");  
    if (pagemark == null) {  
    String state = request.getParameter("index");  
    String pageno = request.getParameter("pageno");  
    System.out.println("pageno=" + pageno);  
    if ("first".equals(state)) {  
    page.setCurrentPage(1);  
    Result result = pdp.productlist(page);  
    request.setAttribute("page", result.getPage());  
    request.setAttribute("productlist", result.getContent());  
    } else if ("prew".equals(state)) {  
    page.setCurrentPage(Integer.parseInt(pageno));  
    Result result = pdp.productlist(page);  
    request.setAttribute("page", result.getPage());  
    request.setAttribute("productlist", result.getContent());  
    } else if ("next".equals(state)) {  
    page.setCurrentPage(Integer.parseInt(pageno));  
    Result result = pdp.productlist(page);  
    request.setAttribute("page", result.getPage());  
    request.setAttribute("productlist", result.getContent());  
    } else if ("end".equals(state)) {  
    page.setCurrentPage(Integer.parseInt(pageno));  
    Result result = pdp.productlist(page);  
    request.setAttribute("page", result.getPage());  
    request.setAttribute("productlist", result.getContent());  
    }  
    } else {  
    page.setCurrentPage(Integer.parseInt(pagemark));  
    Result result = pdp.productlist(page);  
    request.setAttribute("page", result.getPage());  
    request.setAttribute("productlist", result.getContent());  
    }  
    return mapping.findForward("showProduct");  


    -------------------------------------------------------------------

    SSH的分页网上有不少的例子,有利用session的,有利用分页组件的。我几个师兄原来搞的SSH项目也有一个成熟的分页插件。

    具体业务实现类中的分页方法:
    Java代码 
    public List get*****(int pageNO){  
                DetachedCriteria dc = DetachedCriteria.forClass(****.class);             
                List list=*****Dao.getList(dc,pageNO,15);  
                int a = 0;  
                if (list.equals(null)){a=1;}  
                return list;  
            }  
    public PageBean getBean(int pageNO)  
            {  
                ***** jg;  
                 DetachedCriteria dc = DetachedCriteria.forClass(*****.class);  
                PageBean pb=collegeDao.getPageBean(dc,pageNO,15);         
                return pb;  
            }  
     
     
    然后是一个PageBean的工具类,负责创建分页属性和基本逻辑。  
     
    然后是页面的bean获取输出信息及分页属性。  
     
    我觉得单纯的拷贝,自己用的不是很顺手。于是自己也搞了一个,个人认为可以清晰的分层,实现这个分页。分层还是传统的SSH七层结构。  
     
    SSH结构思想参考我的另一篇随笔SSH思想之我见!  
     
    下面是分页思想,一个初始化方法和一个分页实现方法:  
     
    分页的util类:  
     
    package com.sy.util;  
     
    import java.util.List;  
    @SuppressWarnings("unchecked")  
    public class Page {  
     
        private int pageSize;  
        private int totalPage;  
        private int rowCount;  
        private int currentPage;  
        private int prePage;  
        private int nextPage;  
        private boolean hasNextPage;  
        private boolean hasPreviousPage;  
        private List list;  
     
        public Page() {  
            this.pageSize=10;  
        }  
     
        public int getPageSize() {  
            return pageSize;  
        }  
     
        public void setPageSize(int pageSize) {  
            this.pageSize = pageSize;  
        }  
     
        public int getTotalPage() {  
            return totalPage;  
        }  
     
        public void setTotalPage(int totalPage) {  
            this.totalPage = totalPage;  
        }  
     
        public int getRowCount() {  
            return rowCount;  
        }  
     
        public void setRowCount(int rowCount) {  
            this.rowCount = rowCount;  
        }  
     
        public int getCurrentPage() {  
            return currentPage;  
        }  
     
        public void setCurrentPage(int currentPage) {  
            this.currentPage = currentPage;  
        }  
     
        public int getPrePage() {  
            return prePage;  
        }  
     
        public void setPrePage(int prePage) {  
            this.prePage = prePage;  
        }  
     
        public int getNextPage() {  
            return nextPage;  
        }  
     
        public void setNextPage(int nextPage) {  
            this.nextPage = nextPage;  
        }  
     
        public boolean isHasNextPage() {  
            return hasNextPage;  
        }  
     
        public void setHasNextPage(boolean hasNextPage) {  
            this.hasNextPage = hasNextPage;  
        }  
     
        public boolean isHasPreviousPage() {  
            return hasPreviousPage;  
        }  
     
        public void setHasPreviousPage(boolean hasPreviousPage) {  
            this.hasPreviousPage = hasPreviousPage;  
        }  
     
        public List getList() {  
            return list;  
        }  
     
        public void setList(List list) {  
            this.list = list;  
        }  
         
     
    }  
     
     
     
    分页的数据库操作和逻辑判断我把他单独用一个PageDaoImpl来实现:  
     
    /* 
    * 施杨的分页daoimpl类 
    * */  
    package com.sy.dao.impl;  
     
    import java.sql.SQLException;  
    import java.util.List;  
     
    import org.hibernate.HibernateException;  
    import org.hibernate.Query;  
    import org.hibernate.Session;  
    import org.springframework.orm.hibernate3.HibernateCallback;  
    import org.springframework.orm.hibernate3.support.HibernateDaoSupport;  
     
    import com.sy.dao.BaseDao;  
    import com.sy.util.Page;  
     
    @SuppressWarnings("unchecked")  
    public class PageDaoImpl extends HibernateDaoSupport {  
     
        private String hql;  
        public Page page;  
        public int start;  
        public BaseDao dao;  
        public void setDao(BaseDao dao) {  
            this.dao = dao;  
        }  
     
        public void init(int start,String tableName){    // ͨ��init����ʵ����ij�ʼ��  
           page = new Page();  
           this.hql = "from "+tableName;  
           this.start = start;  
           setRowCount();  
           setTotalPage();  
           setCurrentPage();  
           setPrePage();  
           setNextPage();  
           setPreOrNextBoolean();  
        }  
     
        public int getRowCount(){  
           List list = dao.find(hql);  
           if(list.isEmpty()){  
            return 0;  
           }  
           return list.size();  
        }  
     
        public Page getPage(){  
           List list = (List)getHibernateTemplate().execute(new HibernateCallback(){  
            public Object doInHibernate(Session session) throws HibernateException, SQLException {  
             Query query = session.createQuery(hql);  
             query.setFirstResult(getStartIndex());  
             query.setMaxResults(page.getPageSize());  
             return query.list();  
            }    
           });  
           page.setList(list);  
           return page;  
        }  
         
        public void setPreOrNextBoolean() {  
            if (page.getCurrentPage() <= 1) {  
                page.setHasPreviousPage(false);  
            } else {  
                page.setHasPreviousPage(true);  
            }  
            if (page.getCurrentPage() >= page.getTotalPage()) {  
                page.setHasNextPage(false);  
            } else {  
                page.setHasNextPage(true);  
            }  
        }  
     
        public void setCurrentPage() {  
            if (start < 1) {  
                page.setCurrentPage(1);  
            }  
            if (start > page.getTotalPage()) {  
                page.setCurrentPage(page.getTotalPage());  
            }  
            page.setCurrentPage(start);  
        }  
     
        public void setPrePage() {  
            page.setPrePage(page.getCurrentPage() - 1);  
        }  
     
        public void setNextPage() {  
            page.setNextPage(page.getCurrentPage() + 1);  
        }  
     
        public void setTotalPage() {  
            int rowCount = getRowCount();  
            int pageSize = page.getPageSize();  
            if (rowCount > pageSize) {  
                if (rowCount % pageSize == 0) {  
                    page.setTotalPage(rowCount / pageSize);  
                } else {  
                    page.setTotalPage(1 + (rowCount / pageSize));  
                }  
            } else {  
                page.setTotalPage(1);  
            }  
        }  
     
        public void setRowCount() {  
            page.setRowCount(getRowCount());  
        }  
     
        public int getStartIndex() {  
            int startIndex = 0;  
            if (start < 0) {  
                startIndex = 0;  
            } else {  
                if (start > page.getTotalPage()) {  
                    startIndex = page.getPageSize() * (page.getTotalPage() - 1);  
                } else {  
                    startIndex = page.getPageSize() * (start - 1);  
                }  
            }  
            return startIndex;  
        }  
    }  
     
     
     
    然后是业务层接口,举例AdminService.java  
     
     
     
    //管理员service层接口  
    package com.sy.service;  
     
    import java.util.List;  
     
    import com.sy.util.Page;  
    import com.sy.vo.Admin;  
     
    public interface AdminService extends BaseService{  
     
         
         
    //分页初始化  
        public void init(int pno);  
    //分页实现  
        public Page getPage();  
         
    }  
     
     
     
    实现类AdminServiceImpl.java  
     
     
     
    //管理员service层实现类  
    package com.sy.service.impl;  
     
    import java.util.List;  
     
    import com.sy.dao.impl.AdminDaoImpl;  
    import com.sy.dao.impl.PageDaoImpl;  
    import com.sy.service.AdminService;  
    import com.sy.util.Page;  
    import com.sy.vo.Admin;  
     
    @SuppressWarnings("unchecked")  
    public class AdminServiceImpl extends BaseServiceImpl implements AdminService {  
     
            .  
     
        public Page getPage() {  
            return Pdao.getPage();  
        }  
        public void init(int pno) {  
            String tableName="Admin";  
            Pdao.init(pno,tableName);  
        }  
    }  
     
     
    struts的action层AdminAction.java  
     
     
     
    //管理员action实现类  
    package com.sy.action;  
     
    import java.util.List;  
     
    import javax.servlet.http.HttpServletRequest;  
    import javax.servlet.http.HttpServletResponse;  
    import javax.servlet.http.HttpSession;  
     
    import org.apache.struts.action.ActionForm;  
    import org.apache.struts.action.ActionForward;  
    import org.apache.struts.action.ActionMapping;  
    import org.apache.struts.action.ActionMessage;  
    import org.apache.struts.action.ActionMessages;  
     
    import com.sy.form.AdminForm;  
    import com.sy.form.LoginForm;  
    import com.sy.service.AdminService;  
    import com.sy.util.MD5;  
    import com.sy.util.Page;  
    import com.sy.vo.Admin;  
    @SuppressWarnings("unchecked")  
    public class AdminAction extends BaseAction {  
     
            .  
    //查看管理员  
        public ActionForward listAdmins(ActionMapping mapping, ActionForm form,  
                HttpServletRequest request, HttpServletResponse response) {  
            AdminService as=(AdminService)super.getBean("AdminService");  
               int pno = (new Integer(request.getParameter("pno"))).intValue();  
               as.init(pno);  
               Page myPage = as.getPage();  
               List myList = as.getPage().getList();  
               request.setAttribute("myPage", myPage);  
               request.setAttribute("AdminList", myList);  
               return mapping.findForward("show");  
                
        }  
    }  
     
     
    结构清晰,也很实用。  
     
    页面lookAdmin.jsp  
     
     
     
    <%@ page language="java" pageEncoding="UTF-8"%>  
    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">  
    <%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>  
    <%@ taglib uri="http://struts.apache.org/tags-bean" prefix="bean" %>  
    <%@ taglib uri="http://struts.apache.org/tags-html" prefix="html" %>  
    <%@ taglib uri="http://struts.apache.org/tags-logic" prefix="logic" %>  
    <%@ taglib uri="http://struts.apache.org/tags-tiles" prefix="tiles" %>  
    <html>  
        <head>  
            <meta http-equiv="Content-Language" content="zh-cn">  
            <meta http-equiv="Content-Type" content="text/html; charset=utf-8">  
            <title>施杨SSH新闻发布</title>  
        </head>  
        <body>  
            <center>  
                <h3>  
                    查看管理员  
                </h3>  
                <br>  
                <a href="./admin/addAdmin.jsp">添加管理员</a>  
                <br>  
                <a href="./NewsPage2.do?pno=1">查看新闻</a>  
                <br>  
                <table border="2" width="600">  
                    <tr>  
                        <td>  
                            用户名  
                        </td>  
                        <td>  
                            密码  
                        </td>  
                        <td>  
                            操作  
                        </td>  
                    </tr>  
        <c:forEach items="${requestScope['AdminList']}" var="admin">  
                <tr align="center">  
                  <td width="20%" height="10"><c:out value="${admin.aname}" /></td>  
                  <td width="20%" height="10"><c:out value="${admin.apassword}" /></td>  
                  <td>  
                    <a href="./editAdmin.do?aid=<c:out value="${admin.aid}"/>">修改</a>  
                    &nbsp;&nbsp;  
                    <a href="./deleteAdmin.do?aid=<c:out value="${admin.aid}"/>" onclick="javascript:return confirm('您确定删除吗?')">删除</a>  
                  </td>  
                </tr>  
        </c:forEach>  
        </table>  
        <table align="center" width="500">  
        <tr>  
           <td align="center" colspan="10">  
              <logic:present name="myPage">  
                <html:link page="/AdminPage.do?pno=1">首页</html:link>  
              <logic:equal name="myPage" property="hasPreviousPage" value="false">上一页</logic:equal>  
              <logic:equal name="myPage" property="hasPreviousPage" value="true">  
               <a href="./AdminPage.do?pno=<bean:write name="myPage" property="prePage"/>">上一页</a>  
          </logic:equal>  
                
               每页<bean:write name="myPage" property="pageSize"/>条记录  
               共<bean:write name="myPage" property="rowCount"/>条记录  
                    当前第(<bean:write name="myPage" property="currentPage"/>/<bean:write name="myPage" property="totalPage"/>)页  
            <logic:equal name="myPage" property="hasNextPage" value="false">下一页</logic:equal>  
            <logic:equal name="myPage" property="hasNextPage" value="true">  
             <a href="./AdminPage.do?pno=<bean:write name="myPage" property="nextPage"/>">下一页</a>  
            </logic:equal>  
               <a href="./AdminPage.do?pno=<bean:write name='myPage' property='totalPage'/>">末页</a>  
            </logic:present>  
          </td>  
          </tr>  
        </table>  
            </center>  
        </body>  
    </html>  

  • 相关阅读:
    leetcode 70 Climbing Stairs ----- java
    leetcode 69 Sqrt(x) ---java
    leetcode 68 Text Justification ----- java
    如何把iOS代码编译为Android应用
    OpenSource.com 评出 2014 年十佳开源软件
    js singleton
    Java NIO
    WPAD 的原理及实现
    WebKit JavaScript Binding添加新DOM对象的三种方式
    react
  • 原文地址:https://www.cnblogs.com/sailormoon/p/2831497.html
Copyright © 2020-2023  润新知