实例:SSH结合Easyui实现Datagrid的批量删除功能

在我先前的基础上面添加批量删除功能。实现的效果如下

 

删除成功

 

通常情况下删除不应该真正删除,而是应该有一个标志flag,但flag=true表示状态可见,但flag=false表示状态不可见,为删除状态。便于日后数据库的维护和信息的查询。因此表结构添加一个flag字段

 

没有改变的代码这里就不写了,发生改变的代码贴出来

1、因为表结构发生变化。所以对应的Student.java和Student.hbm.xml发生改变

 

[java] view plaincopy
 
  1. package com.model;  
  2.   
  3. public class Student {  
  4.     String studentid;// 主键  
  5.     String name;// 姓名  
  6.     String gender;// 性别  
  7.     String age;// 年龄  
  8.     String flag;//标志  
  9.   
  10.     public String getStudentid() {  
  11.         return studentid;  
  12.     }  
  13.   
  14.     public void setStudentid(String studentid) {  
  15.         this.studentid = studentid;  
  16.     }  
  17.   
  18.     public String getName() {  
  19.         return name;  
  20.     }  
  21.   
  22.     public void setName(String name) {  
  23.         this.name = name;  
  24.     }  
  25.   
  26.     public String getGender() {  
  27.         return gender;  
  28.     }  
  29.   
  30.     public void setGender(String gender) {  
  31.         this.gender = gender;  
  32.     }    
  33.   
  34.     public String getAge() {  
  35.         return age;  
  36.     }  
  37.   
  38.     public void setAge(String age) {  
  39.         this.age = age;  
  40.     }  
  41.   
  42.     public String getFlag() {  
  43.         return flag;  
  44.     }  
  45.   
  46.     public void setFlag(String flag) {  
  47.         this.flag = flag;  
  48.     }  
  49.       
  50.       
  51.   
  52. }  


Student.hbm.xml的代码

 

 

[html] view plaincopy
 
  1. <?xml version="1.0"?>  
  2. <!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"  
  3. "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">  
  4. <!-- Generated 2013-6-23 23:31:47 by Hibernate Tools 3.4.0.CR1 -->  
  5. <hibernate-mapping>  
  6.     <class name="com.model.Student" table="STUDENT">  
  7.         <id name="studentid" type="java.lang.String">  
  8.             <column name="STUDENTID" />  
  9.             <generator class="assigned" />  
  10.         </id>  
  11.         <property name="name" type="java.lang.String">  
  12.             <column name="NAME" />  
  13.         </property>  
  14.         <property name="gender" type="java.lang.String">  
  15.             <column name="GENDER" />  
  16.         </property>  
  17.         <property name="age" type="java.lang.String">  
  18.             <column name="AGE" />  
  19.         </property>  
  20.         <property name="flag" type="java.lang.String">  
  21.             <column name="FLAG" />  
  22.         </property>  
  23.     </class>  
  24. </hibernate-mapping>  


2、对应的Action。StudentAction

 

 

[java] view plaincopy
 
  1. package com.action;  
  2.   
  3. import java.io.PrintWriter;  
  4. import java.util.ArrayList;  
  5. import java.util.List;  
  6.   
  7. import javax.servlet.http.HttpServletRequest;  
  8. import javax.servlet.http.HttpServletResponse;  
  9.   
  10. import net.sf.json.JSONObject;  
  11.   
  12. import org.apache.log4j.Logger;  
  13. import org.apache.struts2.ServletActionContext;  
  14.   
  15. import com.model.Student;  
  16. import com.service.StudentService;  
  17.   
  18. public class StudentAction {  
  19.     static Logger log = Logger.getLogger(StudentAction.class);  
  20.     private JSONObject jsonObj;  
  21.     private String rows;// 每页显示的记录数  
  22.     private String page;// 当前第几页  
  23.     private StudentService student_services;//String依赖注入  
  24.     private Student student;//学生  
  25.     private String parameter;//参数  
  26.     private String table;//表名  
  27.     private String field;//字段  
  28.       
  29.     private String num;//  
  30.     private String ids;//  
  31.       
  32.     //查询出所有学生信息  
  33.     public String allInfo() throws Exception {  
  34.         log.info("查询出所有学生信息");  //引用到log4j你应该加入  log4j的配置文件,不然用System.out.println();来替换  
  35.           
  36.         List list = student_services.getStudentList(page, rows);//传入参数页码和行数,获取当前页的数据  
  37.         this.toBeJson(list,student_services.getStudentTotal());//调用自己写的toBeJson方法转化为JSon格式  
  38.   
  39.         return null;  
  40.     }  
  41.       
  42.     //批量删除信息  
  43.     public String del() throws Exception{  
  44.         log.info("删除学生信息");  
  45.         log.info("循环次数:"+num);  
  46.         List list=new ArrayList();  
  47.                   
  48.         Boolean b=false;  
  49.         int temp=Integer.parseInt(num);//循环次数  
  50.         int j=0;  
  51.         for (int i = 0; i < temp; i++) {  
  52.             list.add(ids.substring(j, j+3));//将一个字符串打散成多个字符串  
  53.             j=j+4;        
  54.             log.info("==========="+list.get(i));  
  55.             student_services.deleteStudent((String) list.get(i));//根据ID主键进行删除操作  
  56.         }  
  57.         return null;  
  58.     }  
  59.       
  60.     //新增学生信息  
  61.     public String add() throws Exception{  
  62.         log.info("新增学生信息");  
  63.   
  64.         student_services.saveStudent(student);  
  65.         return null;  
  66.     }  
  67.       
  68.     //查询唯一性  
  69.     public String verify() throws Exception{  
  70.         log.info("ACTION验证唯一性");  
  71.         String s = student_services.queryBy_unique(table,field ,parameter);  
  72.         log.info("结果:" + s);  
  73.           
  74.         //将验证的结果返回JSP页面,s为1代表没有重复,为0代表有重复  
  75.         HttpServletResponse response = ServletActionContext.getResponse();  
  76.         response.setContentType("text/html;charset=utf-8");  
  77.         PrintWriter out = response.getWriter();  
  78.         out.print(s);  
  79.         out.flush();  
  80.         out.close();  
  81.   
  82.         return null;  
  83.     }  
  84.       
  85.     //转化为Json格式  
  86.        public void toBeJson(List list,int total) throws Exception{  
  87.             HttpServletResponse response = ServletActionContext.getResponse();  
  88.             HttpServletRequest request = ServletActionContext.getRequest();  
  89.               
  90.             JSONObject jobj = new JSONObject();//new一个JSON  
  91.             jobj.accumulate("total",total );//total代表一共有多少数据  
  92.             jobj.accumulate("rows", list);//row是代表显示的页的数据  
  93.   
  94.             response.setCharacterEncoding("utf-8");//指定为utf-8  
  95.             response.getWriter().write(jobj.toString());//转化为JSOn格式  
  96.               
  97.             log.info(jobj.toString());  
  98.        }  
  99.          
  100.       
  101.     public StudentService getStudent_services() {  
  102.         return student_services;  
  103.     }  
  104.   
  105.     public void setStudent_services(StudentService student_services) {  
  106.         this.student_services = student_services;  
  107.     }  
  108.   
  109.     public void setJsonObj(JSONObject jsonObj) {  
  110.         this.jsonObj = jsonObj;  
  111.     }  
  112.   
  113.     public void setRows(String rows) {  
  114.         this.rows = rows;  
  115.     }  
  116.   
  117.     public void setPage(String page) {  
  118.         this.page = page;  
  119.     }  
  120.   
  121.     public void setStudent(Student student) {  
  122.         this.student = student;  
  123.     }  
  124.   
  125.     public Student getStudent() {  
  126.         return student;  
  127.     }  
  128.   
  129.     public void setParameter(String parameter) {  
  130.         this.parameter = parameter;  
  131.     }  
  132.   
  133.     public void setTable(String table) {  
  134.         this.table = table;  
  135.     }  
  136.   
  137.     public void setField(String field) {  
  138.         this.field = field;  
  139.     }  
  140.   
  141.     public void setNum(String num) {  
  142.         this.num = num;  
  143.     }  
  144.   
  145.     public void setIds(String ids) {  
  146.         this.ids = ids;  
  147.     }  
  148.          
  149.       
  150.       
  151. }  


3、对应的接口StudentService

 

 

[java] view plaincopy
 
  1. package com.service;  
  2.   
  3. import java.util.List;  
  4.   
  5. import com.model.Student;  
  6.   
  7. public interface StudentService {  
  8.      public List getStudentList(String page,String rows) throws Exception;//根据第几页获取,每页几行获取数据   
  9.      public int getStudentTotal() throws Exception;//统计一共有多少数据  
  10.      public void saveStudent(Student student)throws Exception;//新增学生信息   
  11.      public String queryBy_unique(String table,String field ,String parameter) throws Exception;//验证唯一性  
  12.      public void deleteStudent(String ids) throws Exception;//删除学生信息   
  13.        
  14. }  


4、对应的接口实现类,从43行开始的del()方法用循环的方式输出多个id,进行批量删除

 

 

[java] view plaincopy
 
  1. package com.serviceImpl;  
  2.   
  3. import java.util.List;  
  4.   
  5. import org.apache.log4j.Logger;  
  6. import org.hibernate.Criteria;  
  7. import org.hibernate.Query;  
  8. import org.hibernate.SessionFactory;  
  9. import org.hibernate.criterion.Restrictions;  
  10.   
  11. import com.model.Student;  
  12. import com.service.StudentService;  
  13.   
  14. public class StudentServiceImpl implements StudentService {  
  15.     Logger log=Logger.getLogger(this.getClass());  
  16.     private SessionFactory sessionFactory;  
  17.       
  18.     // 根据第几页获取,每页几行获取数据  
  19.     public List getStudentList(String page, String rows) {  
  20.           
  21.         //当为缺省值的时候进行赋值  
  22.         int currentpage = Integer.parseInt((page == null || page == "0") ? "1": page);//第几页  
  23.         int pagesize = Integer.parseInt((rows == null || rows == "0") ? "10": rows);//每页多少行  
  24.         //查询学生信息,顺便按学号进行排序  
  25.         List list = this.sessionFactory.getCurrentSession().createQuery("from Student where flag='true'  order by studentid")  
  26.                        .setFirstResult((currentpage - 1) * pagesize).setMaxResults(pagesize).list();  
  27.         //setFirstResult 是设置开始查找处。setFirstResult的值 (当前页面-1)X每页条数  
  28.         //设置每页最多显示的条数  setMaxResults每页的条数了  
  29.         return list;  
  30.     }  
  31.   
  32.     // 统计一共有多少数据  
  33.     public int getStudentTotal() throws Exception {  
  34.         return this.sessionFactory.getCurrentSession().find("from Student where flag='true'").size();  
  35.     }  
  36.       
  37.     // 新增学生信息  
  38.     public void saveStudent(Student student) throws Exception {  
  39.         student.setFlag("true");  
  40.         this.sessionFactory.getCurrentSession().save(student);  
  41.           
  42.     }  
  43.       
  44.     //判断是否具有唯一性  
  45.     public String queryBy_unique(String table,String field ,String parameter) throws Exception {  
  46.         System.out.println("===============验证唯一性=========");  
  47.         String s="select * from "+table +" t where t."+field+"='"+parameter+"'";  
  48.         System.out.println("SQL语句:"+s);  
  49.         Query query = this.sessionFactory.getCurrentSession().createSQLQuery(s);  
  50.          
  51.         int n=query.list().size();  
  52.         if(n==0)//如果集合的数量为0,说明没有重复,具有唯一性  
  53.         {  
  54.           return "1";//返回值为1,代表具有唯一性      
  55.         }         
  56.         return "0";//返回值为0,代表已经有了,重复了  
  57.     }  
  58.       
  59.     //进行删除操作  
  60.     public void deleteStudent(String ids) throws Exception {  
  61.         log.info("删除学生信息");  
  62.         Student student=this.queryStudent(ids);  
  63.         student.setFlag("false");  
  64.         this.sessionFactory.getCurrentSession().update(student);  
  65.     }  
  66.       
  67.     //根据学生主键查询学生信息  
  68.     public Student queryStudent(String id) throws Exception{  
  69.         log.info("根据学生主键查询学生信息");  
  70.         Criteria criteria=this.sessionFactory.getCurrentSession().createCriteria(Student.class);  
  71.         criteria.add(Restrictions.eq("studentid", id));  
  72.         Student student=(Student) criteria.list().get(0);  
  73.         return student;  
  74.           
  75.     }  
  76.       
  77.     public SessionFactory getSessionFactory() {  
  78.         return sessionFactory;  
  79.     }  
  80.   
  81.     public void setSessionFactory(SessionFactory sessionFactory) {  
  82.         this.sessionFactory = sessionFactory;  
  83.     }  
  84.   
  85.       
  86.       
  87.       
  88. }  


5、对应的JSP页面index.jsp

 

 

[java] view plaincopy
 
  1. <%@ page language="java" pageEncoding="utf-8" isELIgnored="false"%>  
  2. <%  
  3.     String path = request.getContextPath();  
  4. %>  
  5. <%@ taglib prefix="s" uri="/struts-tags"%>  
  6. <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">  
  7. <html>  
  8. <head>  
  9. <meta http-equiv="Content-Type" content="text/html; charset=utf-8">  
  10. <title>Easyui</title>  
  11.   
  12. <!-- 引入Jquery -->  
  13. <script type="text/javascript" src="<%=path%>/js/easyui/jquery-1.8.0.min.js" charset="utf-8"></script>  
  14. <!-- 引入Jquery_easyui -->  
  15. <script type="text/javascript" src="<%=path%>/js/easyui/jquery.easyui.min.js" charset="utf-8"></script>  
  16. <!-- 引入easyUi国际化--中文 -->  
  17. <script type="text/javascript" src="<%=path%>/js/easyui/locale/easyui-lang-zh_CN.js" charset="utf-8"></script>  
  18. <!-- 引入easyUi默认的CSS格式--蓝色 -->  
  19. <link rel="stylesheet" type="text/css" href="<%=path%>/js/easyui/themes/default/easyui.css" />  
  20. <!-- 引入easyUi小图标 -->  
  21. <link rel="stylesheet" type="text/css" href="<%=path%>/js/easyui/themes/icon.css" />  
  22.   
  23. <!-- 引入对应的JS,切记一定要放在Jquery.js和Jquery_Easyui.js后面,因为里面需要调用他们,建议放在最后面 -->  
  24. <script type="text/javascript" src="<%=path%>/index.js" charset="utf-8"></script>  
  25.   
  26. </head>  
  27. <body>  
  28.     <h2>  
  29.         <b>easyui的DataGrid实例</b>  
  30.     </h2>  
  31.   
  32.     <table id="mydatagrid">  
  33.         <thead>  
  34.             <tr>  
  35.                 <th data-options="field:'studentid',width:100,align:'center'">学生学号</th>  
  36.                 <th data-options="field:'name',width:100,align:'center'">姓名</th>  
  37.                 <th data-options="field:'gender',width:100,align:'center'">性别</th>  
  38.                 <th data-options="field:'age',width:100,align:'center'">年龄</th>  
  39.             </tr>  
  40.         </thead>  
  41.     </table>  
  42.     <!-- 显示添加按钮的Div -->  
  43.     <div id="easyui_toolbar" style="padding: 2px 0px 2px 15px; height: auto">  
  44.         <a href="#" id="easyui_add" class="easyui-linkbutton" iconCls="icon-add" plain="true">添加学生信息</a>  
  45.         <a href="#" id="deltable" class="easyui-linkbutton"   iconCls="icon-remove" plain="true">批量删除</a>  
  46.     </div>  
  47.   
  48.     <!-- 添加学生信息的表单       -->  
  49.     <div id="addDlg" class="easyui-dialog" style="width: 580px; height: 350px; padding: 10px 20px" closed="true" buttons="#addDlgBtn">  
  50.         <form id="addForm" method="post">  
  51.             <table>  
  52.                 <tr>  
  53.                     <td>学生主键</td>  
  54.                     <td>  
  55.                       <input name="student.studentid" id="studentid" class="easyui-validatebox" required="true" missingMessage="学生主键不能为空">  
  56.                     </td>  
  57.                     <td>  
  58.                         <!-- 存放提示重复信息的div -->  
  59.                         <div id="xianshi1" style="float: left"></div>  
  60.                         <div style="float: left"> </div>  
  61.                         <div id="xianshi2" style="font-size: 14px; color: #FF0000; float: left"></div>  
  62.                     </td>  
  63.                 </tr>  
  64.                 <tr>  
  65.                     <td>姓名</td>  
  66.                     <td>  
  67.                       <input name="student.name" id="name" class="easyui-validatebox" required="true" missingMessage="姓名不能为空">  
  68.                     </td>  
  69.                 </tr>  
  70.                 <tr>  
  71.                     <td>性别</td>  
  72.                     <td>  
  73.                         <!-- 使用Easyui中的combobox -->   
  74.                         <select class="easyui-combobox" style="width: 155px;" name="student.gender" id="gender" data-options="panelHeight:'auto'">  
  75.                             <option value="男">男</option>  
  76.                             <option value="女">女</option>  
  77.                        </select>  
  78.                     </td>  
  79.                 </tr>  
  80.                 <tr>  
  81.                     <td>年龄</td>  
  82.                     <td>  
  83.                       <input name="student.age" id="age" class="easyui-validatebox">  
  84.                     </td>  
  85.                 </tr>  
  86.             </table>  
  87.         </form>  
  88.     </div>  
  89.     <!-- 保存学生信息的按钮,被Jquery设置,当没被调用的时候不显示     -->  
  90.     <div id="addDlgBtn">  
  91.         <a href="#" id="addSaveBooktimecode" class="easyui-linkbutton" iconCls="icon-ok" onclick="add_ok()">确认</a>   
  92.         <a href="#" class="easyui-linkbutton" iconCls="icon-cancel" onclick="javascript:$('#addDlg').dialog('close')">取消</a>  
  93.     </div>  
  94.   
  95. </body>  
  96. </html>  


6、对应的JavaScript页面。index.js

 

 

[javascript] view plaincopy
 
    1.   var isClickOk=true;//判断的变量  
    2. $(function() {  
    3.     //datagrid设置参数  
    4.     $('#mydatagrid').datagrid({  
    5.         title : 'datagrid实例',  
    6.         iconCls : 'icon-ok',  
    7.         width : 600,  
    8.         pageSize : 5,//默认选择的分页是每页5行数据  
    9.         pageList : [ 5, 10, 15, 20 ],//可以选择的分页集合  
    10.         nowrap : true,//设置为true,当数据长度超出列宽时将会自动截取  
    11.         striped : true,//设置为true将交替显示行背景。  
    12.         collapsible : true,//显示可折叠按钮  
    13.         toolbar:"#easyui_toolbar",//在添加 增添、删除、修改操作的按钮要用到这个  
    14.         url:'studentallInfo.action',//url调用Action方法  
    15.         loadMsg : '数据装载中......',  
    16.         //singleSelect:true,//为true时只能选择单行 为了实现批量删除必须隐去  
    17.         fitColumns:true,//允许表格自动缩放,以适应父容器  
    18.         sortName : 'studentid',//当数据表格初始化时以哪一列来排序  
    19.         sortOrder : 'asc',//定义排序顺序,可以是'asc'或者'desc'(正序或者倒序)。  
    20.         remoteSort : false,  
    21.              frozenColumns : [ [ {  
    22.             field : 'ck',  
    23.             checkbox : true  
    24.         } ] ],   
    25.         pagination : true,//分页  
    26.         rownumbers : true//行数  
    27.     });   
    28.       
    29.     //当点击添加学生信息的时候触发  
    30.     $("#easyui_add").click(function() {  
    31.             $("#xianshi1").empty();//清除上次出现的图标1  
    32.         $("#xianshi2").empty();//清除上次出现的图标2  
    33.         $('#addDlg').dialog('open').dialog('setTitle', '添加学生信息');//打开对话框          
    34.         $('#addForm').form('clear');  
    35.     });       
    36.       
    37.     //当光标移开焦点的时候进行重复验证  
    38.     $("#studentid").blur(function(){              
    39.     jQuery.ajax({   //使用Ajax异步验证主键是否重复  
    40.     type : "post",  
    41.     url : "studentverify.action?table=Student&field=studentid¶meter="+$('#studentid').val(),  
    42.     dataType:'json',  
    43.     success : function(s){    
    44.            if($('#studentid').val()==""){//当为主键为空的时候什么都不显示,因为Easyui的Validate里面已经自动方法限制  
    45.               
    46.            }  
    47.            else if( s == "1" )//当返回值为1,表示在数据库中没有找到重复的主键  
    48.         {   isClickOk=true;  
    49.             $("#xianshi1").empty();  
    50.             var txt1="<img src="+"'imgs/agree_ok.gif'"+"/>";//引入打勾图标的路径  
    51.             $("#xianshi1").append(txt1);//在id为xianshi1里面加载打勾图标  
    52.             $("#xianshi2").empty();  
    53.             $("#xianshi2").append("未被使用");//在di为xianshi2中加载“未被使用”这四个字  
    54.         }  
    55.            else   
    56.         {  
    57.             $("#xianshi1").empty();  
    58.             isClickOk=false;  
    59.             var txt1="<img src="+"'imgs/agree_no.gif'"+"/>"//引入打叉图标的路径  
    60.             $("#xianshi1").append(txt1);//在id为xianshi1里面加载打叉图标  
    61.             $("#xianshi2").empty();  
    62.             $("#xianshi2").append("已被使用");//在id为xianshi2里面加载“已被使用”四个字                 
    63.         }  
    64.     }  
    65. });  
    66. });  
    67.       
    68.     /********** 点击删除按钮开始 ***********/     
    69.     $('#deltable').click(function(){  
    70.         var array = $('#mydatagrid').datagrid('getSelections');  
    71.         var id2="";  
    72.         var num=array.length;//获取要删除信息的个数  
    73.         for(var i=0; i<array.length; i++){//组成一个字符串,ID主键之间用逗号隔开  
    74.             if(i!=array.length-1){  
    75.                 id2=id2+array[i].studentid+",";  
    76.              }else{  
    77.                  id2=id2+array[i].studentid;  
    78.              }   
    79.         }   
    80.         var selected = $('#mydatagrid').datagrid('getSelected');  
    81.         if (array != "") {  
    82.             $.messager.defaults={ok:"确定",cancel:"取消"};   
    83.             $.messager.confirm('', '是否要删除该信息?', function(r){  
    84.                 if (r){  
    85.                     $.post("studentdel.action",  
    86.                     {  ids:id2,num:num},function(response){  
    87.                         if(response=="-1"){  
    88.                             $.messager.alert('操作提示',"删除失败",'error');  
    89.                         }else{  
    90.                             $('#mydatagrid').datagrid({url:"studentallInfo.action"});  
    91.                             $.messager.alert('操作提示',"删除成功",'info');  
    92.                         }  
    93.                     });  
    94.                 }  
    95.             });  
    96.         }else{  
    97.             $.messager.alert('',"请先选择要删除的信息!");  
    98.         }  
    99.           
    100.     });  
    101.     /********** 删除按钮结束 ***********/  
    102.       
    103. });  
    104.   
    105. //添加信息点击保存的时候触发此函数  
    106. function add_ok(){        
    107.     $.messager.defaults={ok:"确定",cancel:"取消"};   
    108.     $.messager.confirm('Confirm', '您确定增加?', function(r){//使用确定,取消的选择框  
    109.         if (r){  
    110.             $('#addForm').form('submit',{//引入Easyui的Form  
    111.                 url:"studentadd.action",//URL指向添加的Action  
    112.                 onSubmit: function(){  
    113.                     if(isClickOk==false){//当主键重复的时候先前就已经被设置为false,如果为false就不提交,显示提示框信息不能重复  
    114.                         $.messager.alert('操作提示', '主键不能重复!','error');  
    115.                         return false;  
    116.                     }                 
    117.                     else if($('#addForm').form('validate')){//判断Easyui的Validate如果都没错误就同意提交  
    118.                         $.messager.alert('操作提示', '添加信息成功!','info');  
    119.                         return true;  
    120.                     }else{//如果Easyui的Validate的验证有一个不完整就不提交  
    121.                         $.messager.alert('操作提示', '信息填写不完整!','error');  
    122.                         return false;     
    123.                         }                                 
    124.                 }  
    125.             });  
    126.             $('#mydatagrid').datagrid({url:'studentallInfo.action'});//实现Datagrid重新刷新效果  
    127.             $('#addDlg').dialog('close');//关闭对话框  
    128.               }       
    129.     });   
    130. }  
posted @ 2015-02-10 09:07  岁月淡忘了谁  阅读(816)  评论(0编辑  收藏  举报