struts实现分页

前端分页技术详解:页码实现与优化策略 本文还有配套的精品资源,点击获取 简介:分页是前端开发中处理大数据量展示的关键技术,如电商网站商品列表和社交媒体动态流等场景。本文章深入探讨了分页页码的实现与优化策略,包括基本概念、HTML a 标签使用、CSS 样式定制、JavaScript/jQuery 动态管理、Ajax 异步数据加载、前端框架分页组件应用、分页参数和类型、性能优化以及 SEO 考虑。开... 阅读详情
在做之前我们的头脑中要有一个大概的框架:也就是我们怎么样来
划分各个功能模块。一般来说一个分页功能框架至少要包含如下几个
部分(java class)(括号注释对应本实例中的类)
1:页面元素(Order.java)。也就是一个页面要显示的一条条的记录
2:数据(DataCollection.java)。对应一个javaBean,我看有不少前辈将获取数据与页面控制放在一起,
我本人认为这样做不好。一来逻辑不清楚,二来对于一个控制来说应是可重用的,但放在一起就不能重用了。
3:页面页面控制(PageController.java)。也就是对一个页面的定义
4:页面跳转的Action(PageAction.java).因为这个页面跳转相对来说比较简单我们可以直接继承ActionForward
来达到这个目的。
5:用来显示的View.(page.jsp)

*********************************
注:本实例是从一个客户定单中取数据
*********************************

下面的我就各个部分作一个简单的介绍
1:页面元素。也就是一个页面要显示的一条条的记录(Order.java)
这个Order.java没有多大意思它只是一个“定单”的定义
        private int orderID;           定单编号
        private String customerID;        客户编号
        private Date orderDate;                下单日期
***********************************************************
/*
* Created on 2004-9-14
*
* TODO To change the template for this generated file go to
* Window - Preferences - Java - Code Style - Code Templates
*/
package com.toad.pub;
import java.util.Date;
/**
* @author Administrator
*
* TODO To change the template for this generated type comment go to
* Window - Preferences - Java - Code Style - Code Templates
*/
public class Order {

        private int orderID;                
        private String customerID;
        private Date orderDate;
        /**
         *
         */
        public Order() {
                // TODO Auto-generated constructor stub
        }
        /**
         * @param orderID
         * @param customerID
         * @param orderDate
         */
        public Order(int orderID, String customerID, Date orderDate) {
                this.orderID = orderID;
                this.customerID = customerID;
                this.orderDate = orderDate;
        }
        /**
         * @return Returns the customerID.
         */
        public String getCustomerID() {
                return customerID;
        }
        /**
         * @param customerID The customerID to set.
         */
        public void setCustomerID(String customerID) {
                this.customerID = customerID;
        }
        /**
         * @return Returns the orderDate.
         */
        public Date getOrderDate() {
                return orderDate;
        }
        /**
         * @param orderDate The orderDate to set.
         */
        public void setOrderDate(Date orderDate) {
                this.orderDate = orderDate;
        }
        /**
         * @return Returns the orderID.
         */
        public int getOrderID() {
                return orderID;
        }
        /**
         * @param orderID The orderID to set.
         */
        public void setOrderID(int orderID) {
                this.orderID = orderID;
        }
***********************************************************
2:数据(DataCollection.java).这个部分有您可以依据个人情况来进行
自定义。我已有的环境中是用的连接池.
        private ArrayList list;  用来存放所查询到的数据
        private Connection con; 代表一个数据库连接。这个连接
是通过<jsp:setProperty../>传过来的。在接下来的view中我会作介绍
***********************************************************
/*
* Created on 2004-9-15
*
* TODO To change the template for this generated file go to
* Window - Preferences - Java - Code Style - Code Templates
*/
package com.toad.pub;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.Date;
/**
* @author Administrator
*
* TODO To change the template for this generated type comment go to
* Window - Preferences - Java - Code Style - Code Templates
*/
public class DataCollection {

        private ArrayList list;
        private Connection con;
        /**
         *
         */
        public DataCollection() {
                list=new ArrayList();
        }
        /**
         * @return Returns the con.
         */
        public Connection getCon() {
                return con;
        }
        /**
         * @param con The con to set.
         */
        public void setCon(Connection con) {
                this.con = con;
        }
        /**
         * @return Returns the list.
         */
        public ArrayList getList() {
                return list;
        }
        /**
         * @param list The list to set.
         */
        public void setList() {
                
                if(this.con==null){
                        System.out.println("con is null!");
                        return;
                }
                String syntax="select orderid,customerid,orderdate from orders order by orderid asc";
                int orderID=0;
                String customerID=null;
                Date orderDate=null;
                ResultSet rs=null;
                PreparedStatement pst=null;
                try{
                        pst=con.prepareStatement(syntax);
                        rs=pst.executeQuery();
                        while(rs.next()){
                                orderID=rs.getInt(1);
                                customerID=rs.getString(2);
                                orderDate=rs.getDate(3);
                                list.add(new Order(orderID,customerID,orderDate));
                        }
                }catch(SQLException e){
                        System.out.println("SQLException occur at fetch datas !");
                }finally{
                        try{
                                rs.close();
                                con.close();
                        }catch(SQLException e){
                                System.out.println("SQLException occur at rs and con close() !");
                        }
                }
        }
}
***********************************************************
3:页面页面控制(PageController.java)
        private ArrayList allItems;        保存DataCollection中的list,也就是所有的数据
        private int pageNumber;                当前页的页号
        private int lastIndexOfPage;        当前页的最后一个item(Order)在allItems中的index
        private int itemsPerPage;        每一页的容量
        private int itemsInPage;        当前页的实际items(orders)
        private int lastPageNumber;        为allItems/iemsPerPage or allItems/iemsPerPage+1
        private boolean hasPrevious;        是否为第一页
        private boolean hasNext;        是来为最后一页
***********************************************************
/*
* Created on 2004-9-14
*
* TODO To change the template for this generated file go to
* Window - Preferences - Java - Code Style - Code Templates
*/
package com.toad.pub;
import java.util.ArrayList;

/**
* @author Administrator
*
* TODO To change the template for this generated type comment go to
* Window - Preferences - Java - Code Style - Code Templates
*/
public class PageController {
        
        private int pageNumber;
        private int lastIndexOfPage;
        private int itemsPerPage;
        private int itemsInPage;
        private int lastPageNumber;
        private boolean hasPrevious;
        private boolean hasNext;
        private ArrayList allItems;
        /**
         * @return Returns the allItems.
         */
        public ArrayList getAllItems() {
                return allItems;
        }
        /**
         * @param allItems The allItems to set.
         */
        public void setAllItems(ArrayList allItems) {
                this.allItems = allItems;
        }
        /**
         * @return Returns the hasNext.
         */
        public boolean isHasNext() {
                return hasNext;
        }
        /**
         * @param hasNext The hasNext to set.
         */
        public void setHasNext() {
                int items=pageNumber*itemsPerPage;
                if(items>=allItems.size()){
                        this.hasNext =false;
                }else{
                        this.hasNext=true;
                }
        }
        /**
         * @return Returns the hasPrevious.
         */
        public boolean isHasPrevious() {
                return hasPrevious;
        }
        /**
         * @param hasPrevious The hasPrevious to set.
         */
        public void setHasPrevious() {
                if(pageNumber==1){
                        this.hasPrevious=false;
                }else{
                        this.hasPrevious=true;
                }
        }
        /**
         * @return Returns the itemsInPage.
         */
        public int getItemsInPage() {
                return this.itemsInPage;
        }
        /**
         * @param itemsInPage The itemsInPage to set.
         */
        public void setItemsInPage() {
                int temp=pageNumber*itemsPerPage;
                if(temp<=allItems.size()){
                        this.itemsInPage=itemsPerPage;
                }else{
                        this.itemsInPage=( allItems.size() - ((pageNumber-1)*itemsPerPage ));
                }
        }
        /**
         * @return Returns the itemsPerPage.
         */
        public int getItemsPerPage() {
                return itemsPerPage;
        }
        /**
         * @param itemsPerPage The itemsPerPage to set.
         */
        public void setItemsPerPage(int itemsPerPage) {
                this.itemsPerPage = itemsPerPage;
        }
        /**
         * @return Returns the pageNumber.
         */
        public int getPageNumber() {
                return pageNumber;
        }
        /**
         * @param pageNumber The pageNumber to set.
         */
        public void setPageNumber(int pageNumber) {
                this.pageNumber = pageNumber;
        }
        
        /**
         * @return Returns the lastIndexOfPage.
         */
        public int getLastIndexOfPage() {
                return lastIndexOfPage;
        }
        /**
         * @param lastIndexOfPage The lastIndexOfPage to set.
         */
        public void setLastIndexOfPage() {
                this.lastIndexOfPage =(pageNumber -1)*itemsPerPage;
        }
        
        /**
         * @return Returns the lastPageNumber.
         */
        public int getLastPageNumber() {
                return lastPageNumber;
        }
        /**
         * @param lastPageNumber The lastPageNumber to set.
         */
        public void setLastPageNumber() {
                if(allItems.size()%itemsPerPage==0){
                        this.lastPageNumber =allItems.size()/itemsPerPage;
                }else{
                        this.lastPageNumber =allItems.size()/itemsPerPage+1;
                }
        }
}
***********************************************************
4:页面跳转的Action(PageAction.java).
请注意PageAction是直接继承于ActionForward
很简单:就是根据action=arg2.getParameter("action").trim();
的返回值来设定pageNubmer和与之相就的设定。
一定不能忘了调用 return super.execute(arg0, arg1, arg2, arg3);
***********************************************************
/*
* Created on 2004-9-14
*
* TODO To change the template for this generated file go to
* Window - Preferences - Java - Code Style - Code Templates
*/
package com.toad.pub;

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.actions.ForwardAction;
import com.toad.pub.PageController;

/**
* @author Administrator
*
* TODO To change the template for this generated type comment go to
* Window - Preferences - Java - Code Style - Code Templates
*/
public class PageAction extends ForwardAction {
        
        /* (non-Javadoc)
         * @see org.apache.struts.action.Action#execute(org.apache.struts.action.ActionMapping, org.apache.struts.action.ActionForm, javax.servlet.http.HttpServletRequest, javax.servlet.http.HttpServletResponse)
         */
        public ActionForward execute(ActionMapping arg0, ActionForm arg1,
                        HttpServletRequest arg2, HttpServletResponse arg3) throws Exception {
                // TODO Auto-generated method stub
                String action=null;
                HttpSession session=arg2.getSession(true);
                action=arg2.getParameter("action").trim();
                PageController controller=(PageController)session.getAttribute("controller");
                int pageNumber=controller.getPageNumber();
                if(action.compareToIgnoreCase("next")==0){
                        ++pageNumber;
                }else if(action.compareToIgnoreCase("pervious")==0){
                        --pageNumber;
                }else if(action.compareToIgnoreCase("first")==0){
                        pageNumber=1;
                }else if(action.compareToIgnoreCase("last")==0){
                        pageNumber=controller.getLastPageNumber();
                }
                controller.setPageNumber(pageNumber);
                controller.setHasNext();
                controller.setHasPrevious();
                controller.setItemsInPage();
                controller.setLastIndexOfPage();
                return super.execute(arg0, arg1, arg2, arg3);
        }
}
***********************************************************
5:用来显示的View.(page.jsp)
***********************************************************
<%@ page language="java" %>
<%@ taglib prefix="html" uri="/WEB-INF/struts-html.tld"%>
<%@ taglib prefix="bean" uri="/WEB-INF/struts-bean.tld"%>
<%@ taglib prefix="logic" uri="/WEB-INF/struts-logic.tld"%>
//得到连接池对象
<bean:define id="conpool" name="pool" type="com.toad.util.ConnectionPool"></bean:define>
//定义一个javaBean同时设定数据(<% Data.setList();%>)
<jsp:useBean id="Data" class="com.toad.pub.DataCollection" scope="session">
        <jsp:setProperty name="Data" property="con" value="<%=conpool.getcon()%>"/>
        <% Data.setList();%>
</jsp:useBean>
//定义一个PageController同时进行初始化请注意调用顺序!
<logic:notEmpty name="Data" property="list">
        <jsp:useBean id="controller" class="com.toad.pub.PageController" scope="session">
            <jsp:setProperty name="controller" property="allItems" value="<%=Data.getList()%>"/>
                <jsp:setProperty name="controller" property="itemsPerPage" value="20"/>
                <jsp:setProperty name="controller" property="pageNumber" value="1"/>
                <%
                        controller.setHasNext();
                        controller.setHasPrevious();
                        controller.setItemsInPage();
                        controller.setLastIndexOfPage();
                        controller.setLastPageNumber();
                %>
        </jsp:useBean>
</logic:notEmpty>

<!DOCTYPE HTML PUBLIC "-//w3c//dtd html 4.0 transitional//en">
<html>
<head>
<title>Lomboz JSP</title>
</head>
<body bgcolor="#FFFFFF">
<%int i=0;%>
Page Number:<bean:write name="controller" property="pageNumber" />
<table width="100%">
<tr>
<th align=&#39;left&#39;>Row Number</th>
<th align=&#39;left&#39;>Order ID</th>
<th align=&#39;left&#39;>Customer ID</th>
<th align=&#39;left&#39;>Order Date</th>
</tr>
<logic:present name="controller" scope="session">
        <bean:define id="offset" name="controller" property="lastIndexOfPage" type="Integer"></bean:define>
        <bean:define id="length" name="controller" property="itemsInPage" type="Integer"></bean:define>
        <logic:iterate id="order" name="controller" property="allItems" offset="<%=offset.toString()%>" length="<%=length.toString()%>" type="com.toad.pub.Order">
                <tr>
                <td><%=++i%></td>
                <td><bean:write name="order" property="orderID" /></td>
                <td><bean:write name="order" property="customerID" /></td>
                <td><bean:write name="order" property="orderDate" /></td>
                </tr>
        </logic:iterate>
        
        <tr>
        <logic:notEqual name="controller" value="1" property="pageNumber" >
        <td><html:link page="/pageaction.do?action=first">First</html:link></td>
        </logic:notEqual>
        <logic:equal name="controller" property="hasPrevious" value="true">
        <td><html:link page="/pageaction.do?action=pervious">Previous</html:link></td>
        </logic:equal>

        <logic:equal name="controller" property="hasNext" value="true">
        <td><html:link page="/pageaction.do?action=next">Next</html:link></td>
        </logic:equal>

        <bean:define id="lastpagenumber" name="controller" property="lastPageNumber" type="Integer"></bean:define>
        <logic:notEqual name="controller" property="pageNumber" value="<%=lastpagenumber.toString()%>"  >
        <td><html:link page="/pageaction.do?action=last">Last</html:link></td>
        </logic:notEqual>
        
        </tr>
</logic:present>
</table>
</body>
</html>
下面是我在struts-config.xml中的有定义
**********************************
<action path="/pageaction" parameter="/docs/test/page.jsp" type="com.toad.pub.PageAction" />
*************************************
1:这样做每次换页的时候传入的并不是一个页码仅仅是一个代表当前动作的字符串"first","next","previous","last",页面的计算动态由PageController来计算
2:我用是继承的ForwardAction,因为在分页中没有不必有Form,只是一个简单的跳页

Trackback: http://tb.blog.csdn.net/TrackBack.aspx?PostId=579353

Struts框架实现简单分页功能指南 Struts是Java EE应用中一个流行的Web层框架,它遵循MVC(Model-View-Controller)设计模式,将应用程序分为三个核心组件以实现业务逻辑与用户界面的分离。Struts简化了企业级应用的开发,尤其是在处理用户请求和展示响应方面。分页功能,是一种数据处理技术,允许用户在处理大量数据时,能够将数据分割成小块(页面)进行分批显示。这种技术在用户界面上的应用十分广泛,尤其在Web开发领域,分页处理是提高用户体验的重要组成部分。 阅读详情

相关推荐

实现Struts+Hibernate框架下的高效分页功能

本文还有配套的精品资源,点击获取 简介:通过结合Struts和Hibernate这两个Java开源框架,本项目展示了如何实现Web应用程序中的数据分页Struts负责处理用户请求并管理流程,而Hibernate用于数据库操作与业务逻辑解耦。项目中首先在Hibernate DAO层编写带有分页条件的查询方法,然后通过StrutsAction类调用这些方法,并在JSP页面利...

weixin_31591833的博客 2008

Struts2实现分页

struts实现数据库添删改查,以及分页 ArrayList list; UserService service; Users user; Pager page=new Pager(); public Pager getPage() { return page; } public void setPage(Pager page) { this.page = page; } public Users getUser() { return user; } public void setUser(Users user) { this.user = user; } public ArrayList getList() { return list; } public void setList(ArrayList list) { this.list = list; } public String lists() { service = new UserService(); // list=service.getAllUsers(); System.out.println("page.pageNow="+page.getPageNow()); list = service.getUsersByPage(page.getPageNow(), page.getPageSize()); return Action.SUCCESS; } public String input() { service = new UserService(); if (user != null) { user = service.getUsersByname(user); System.out.println(user.toString()); } return Action.SUCCESS; } public String save() { service = new UserService(); if (user != null && user.getCdate() != null) { service.updateUsers(user); System.out.println(user.toString()); } else { service.addUsers(user); } return Action.SUCCESS; } public String deleteusers() { service = new UserService(); service.delUsers(user); return Action.SUCCESS; } 用户名密码权限日期操作 <a href="input?user.username=">修改     <a href="del-users?user.username=">删除 添加用户 <a href="list-users?page.pageNow=">首页 <a href="list-users?page.pageNow=<s:property value="page.

Struts2与Hibernate分页功能的实现详解

Struts2是一个基于MVC设计模式的Web应用框架,它的核心是过滤器Dispatcher,用于将用户请求与Action映射,并返回相应的视图。MVC模式通过分离视图(View)、模型(Model)和控制器(Controller)来实现业务逻辑与界面显示的分离,提高了代码的可维护性和可扩展性。

weixin_42613018的博客 695

struts2实现分页

struts2中循环标签的使用

解决Struts分页显示(转)

解决Struts分页显示作者:李敏强  学习Struts已经有2个多月了,前几天群里的朋友问我Struts分页显示的问题,觉得好像与在jsp中的差不多,但还是遇到了这样那样的问题,好不容易花了几天时间把问题都搞清楚,觉得还是写点东西跟大家分享一下的好!至于Struts的语法这里就不多介绍了,不懂的朋友可以先看网上的其他文章。一 开发环境Elicpse+Struts Studio+SqlServer

ewolf的工作专栏 1922

angular 分页插件的使用

html: <pagination total-items="totalItems" ng-model="currentPage" items-per-page="itemPerPage" pre...

QDY5945的博客 537

MyBatis分页插件(PageHelper)介绍与集成SpringMVC

原文来自:https://juejin.im/entry/5a333c29f265da4307034f12如果你也在用 MyBatis,建议尝试该分页插件,这一定是最方便使用的分页插件。分页插件的必要性互联网应用中,分页可谓无处不在,在每个需要展示数据的地方,都能找到分页的影子。在日常开发中,为了追求效率,通常使用数据库的物理分页。这时,对于一个业务逻辑SQL,大多数情况需要输出两段SQL来达到分...

MR_wb的博客 794

angularJS 自定义指令 分页

原理和使用说明 1、插件源码主要基于angulardirective来实现。 2、调用时关键地方是后台请求处理函数,也就是从后台取数据。 3、插件有两个关键参数currentPage、itemsPerPage,当前页码和每页的记录数。 4、实现方法调用后我们需要根据每次点击分页插件页码时重新提交后台来获取相应页码数据。 在调用的页码中我...

weixin_34019144的博客 193

struts开发实践—分页实现

--文章源自一位网友这篇文章是一个叫smilelily网友写的,昨天找自己的email记录找到了,他在csdn上有用户,文章源地址 http://dev.csdn.net/user/smilelily struts开发实践-分页实现本案主要功能是完成数据集的分页显示。示例代码如下: 1.PageInfo类:定义分页信息。/******************program b

大肚翁的专栏 1574

Struts2 实现分页

http://songshu0616.blog.163.com/blog/static/26250151201041731939595/ 1.转自:http://www.cnblogs.com/shiyangxt/archive/2008/11/04/1316737.html 环境:MyEclipse6.5+Mysql5+struts2.0.11 实现分页用到三个类,分别为NewsD...

LIXG425的专栏 225

Struts、Hibernate和display超简单实现分页

说明:<br>一、含演示数据库建立脚本(较简单)<br>二、使用Struts、Hibernate和display超简单的实现分页,你不用在页面上再写很多<%%>和很多判断,简单到只需要几行语句:<br><html:form method="post" action="/displayList"><br> <display:table name="lst" cellspacing="0" border="1" cellpadding="0" requestURI="displayList.do" export="true"><br> <display:column property="id" title="编号" /><br> <display:column property="name" title="名字" /><br> <display:column property="age" title="年龄" /><br> </display:table><br> <pag:pagination name="pv" requestUri="displayList.do"></pag:pagination><br></html:form><br>这就是全部语句,不用写任何代码。<br>三、由于使用了display,所以自动实现了Excel | XML | CSV 的导出功能。<br>四、生成页面导航的样式是:<br>[首页/前一页] [后一页/尾页] 显示第1到1条 共3项 每页显示2项 共3页 第1页 GO<br>其中每页显示2项中的项操作人员可以随便改,“第1页”中的页号可以随便改,操作相当的灵活。我看到的样式暂只这一种,我想在display中应可以方便的改变导航样式,不行的话你就去修改display的标签源码,想改成什么样就改成什么样。<br><br>心得:<br>一、今天才明白使用Hibernate还有一个好处,你可以随便改数据库,你可以一会用oracle,一会用sqlserver,一会用mysql,总之你写成的代码换一种数据库,最多就是改一下那几个xml文件,个人感觉这才是java一个地方编写到处运行呢。<br>二、明白了使用标签的好处。<br><br>另提示一点:<br>打开测试用“http://localhost:8080/StrutsHibernateDisplay/displayList.do”,如果直接打开list.jsp会告诉你没有数据的。<br><br>代码是wenlong342的,我只是稍做修改,然后写了上面的说明文字。

Struts2 分页实现

自己练习的一个struts2分页实现,代码完整,初学者可以下载看看,大家共同努力,发现问题,提升技能

经典struts2分页方法 JAVA_WEB必备分页 源码

很好的分页方法,是java工程师必备在分页方法,分页博客地址: http://blog.csdn.net/baozhiyao234/archive/2010/06/01/5640411.aspx

Struts2分页实现源码

Struts2分页实现源码 1.介绍 (1)Struts2相当于是servlet,和servelt不同的是当提交到struts.xml中之后,通过aciton标签就可以直接调用想用的方法,减少了代码量。 (2)在ActionSuport中set方法是注入,即是set方法是获取jsp页面中传过来的值,get方法是是向jsp页面发送值,值得一提的是有了get和set方法之后就取代了servlet

韩晓爽的专栏 8312

Struts实现分页

学习Struts已经有2个多月了,前几天群里的朋友问我Struts分页显示的问题,觉得好像与在jsp中的差不多,但还是遇到了这样那样的问题,好不容易花了几天时间把问题都搞清楚,觉得还是写点东西跟大家分享一下的好!至于Struts的语法这里就不多介绍了,不懂的朋友可以先看网上的其他文章。 一 开发环境Elicpse+Struts Studio+SqlServer2000+Tomcat。

614

Struts实现分页的方法:

 在Struts实现分页的方法:假如在数据库表中有:tb_Client_sfzy       表省份编号  省份名称  省份介绍                                          tb_Client_csxx        省份简称    省份名称   城市名称 邮编 电话区号       两者通过省份名称联系      先查询操作 代码如下:Quer

pulybuffer的专栏 558

Struts2+Hibernate 实现数据分页

Struts2+Hibernate 实现数据分页 1.用Hibernate实现分页技术: /** * 使用hql语句进行分页查询 * @param hql 需要查询的hql语句 * @param offset 第一条记录索引 * @param pageSize 每页需要显示的记录数 * @return 当前页的所有记录 */ @SuppressWarn

TKD03072010的专栏 6515
上一篇: [转]一些struts开发技巧
下一篇: Struts常见错误汇总
JHT2002
博客等级 码龄23年 0粉丝 3原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值