【SSH项目实战】国税协同平台-18.信息发布管理需求分析&CRUD

我们接下来要做一个信息发布管理的功能,首先来看看我们的需求分析:
要求
信息发布管理原型界面:

编辑信息原型界面:

2.6.2功能说明

信息发布管理:
根据信息标题、信息类型进行信息查询;可以在页面中点击“新增”发布信息,点击“删除”进行批量删除信息。列表数据包括信息标题、信息分类、申请人、申请时间、状态、操作;其中操作栏的内容为停用/发布、编辑、删除。当信息的状态为停用时,在操作栏显示发布、编辑、删除,当信息的状态为发布时,操作栏显示停用、编辑、删除。

编辑信息:
填写内容包括信息分类(通知公告、政策速递、纳税指导)、来源、信息标题、信息内容(需要编辑多种格式内容)、备注、申请人、申请时间。

首先我们用图形表达需求,使用流程图,我们使用Edraw Max来绘制流程图:

我们下面先着手来进行模块的开发:
首先编写实体类

package cn.edu.hpu.tax.info.entity;

import java.io.Serializable;
import java.sql.Timestamp;
import java.util.HashMap;
import java.util.Map;

public class Info implements Serializable{

	private String infoId;
	private String type;
	private String source;
	private String title;
	private String content;
	private String memo;
	private String creator;
	private Timestamp createTime;
	private String state;

	//状态
	public static String INFO_STATE_PUBLIC = "1";//发布
	public static String INFO_STATE_STOP = "0";//停用

	//信息分类
	public static String INFO_TYPE_TZGG="tzgg";
	public static String INFO_TYPE_ZCSD="zcsd";
	public static String INFO_TYPE_NSZD="nszd";
	public static Map<String,String> INFO_TYPE_MAP;
	static{
		INFO_TYPE_MAP=new HashMap<String,String>();
		INFO_TYPE_MAP.put(INFO_TYPE_TZGG, "通知公告");
		INFO_TYPE_MAP.put(INFO_TYPE_ZCSD, "政策速递");
		INFO_TYPE_MAP.put(INFO_TYPE_NSZD, "纳税指导");
	}

	public Info(){

	}

	public Info(String infoId, String type, String source, String title,
			String content, String memo, String creator, Timestamp createTime,
			String state) {
		super();
		this.infoId = infoId;
		this.type = type;
		this.source = source;
		this.title = title;
		this.content = content;
		this.memo = memo;
		this.creator = creator;
		this.createTime = createTime;
		this.state = state;
	}
	//下面是get和set方法,这里省略

}

然后使我们的映射文件:
Info.hbm.xml

<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">

<hibernate-mapping>
    <class name="cn.edu.hpu.tax.info.entity.Info" table="info">
        <id name="infoId" type="java.lang.String">
            <column name="info_id" length="32"/>
            <generator class="uuid.hex" />
        </id>
        <property name="type" type="java.lang.String">
            <column name="type" length="10" />
        </property>
        <property name="source" type="java.lang.String">
            <column name="source" length="50" />
        </property>
        <property name="title" type="java.lang.String">
            <column name="title" length="100" not-null="true" />
        </property>
        <property name="content" type="text">
            <column name="content" />
        </property>
        <property name="memo" type="java.lang.String">
            <column name="memo" length="200" />
        </property>
        <property name="creator" type="java.lang.String">
            <column name="creator" length="10" />
        </property>
        <property name="createTime" type="java.sql.Timestamp">
            <column name="create_time" length="19" />
        </property>
        <property name="state" type="java.lang.String">
            <column name="state" length="1" />
        </property>
    </class>
</hibernate-mapping>

之后使我们的Dao层:

package cn.edu.hpu.tax.info.dao;

import cn.edu.hpu.tax.core.dao.BaseDao;
import cn.edu.hpu.tax.info.entity.Info;

public interface InfoDao extends BaseDao<Info> {

}

package cn.edu.hpu.tax.info.dao.impl;

import cn.edu.hpu.tax.core.dao.impl.BaseDaoImpl;
import cn.edu.hpu.tax.info.dao.InfoDao;
import cn.edu.hpu.tax.info.entity.Info;

public class InfoDaoImpl extends BaseDaoImpl<Info> implements InfoDao {

}

然后使我们的Service层:

package cn.edu.hpu.tax.info.service;

import java.io.Serializable;
import java.util.List;

import cn.edu.hpu.tax.info.entity.Info;

public interface InfoService {

	//新增
	public void save(Info entity);
	//更新
	public void update(Info enetity);
	//根据id删除
	public void delete(Serializable id);
	//根据id查找
	public Info findObjectById(Serializable id);
	//查找列表
	public List<Info> findObjects();
}

package cn.edu.hpu.tax.info.service.impl;

import java.io.Serializable;
import java.util.List;

import javax.annotation.Resource;

import org.springframework.stereotype.Service;

import cn.edu.hpu.tax.info.dao.InfoDao;
import cn.edu.hpu.tax.info.entity.Info;

@Service("infoService")
public class InfoServiceImpl implements InfoService {

	@Resource
	private InfoDao infoDao;

	@Override
	public void delete(Serializable id) {
		infoDao.delete(id);
	}

	@Override
	public Info findObjectById(Serializable id) {
		return infoDao.findObjectById(id);
	}

	@Override
	public List<Info> findObjects() {
		return infoDao.findObjects();
	}

	@Override
	public void save(Info entity) {
		infoDao.save(entity);
	}

	@Override
	public void update(Info enetity) {
		infoDao.update(enetity);
	}

}

然后使我们的Action层:

package cn.edu.hpu.tax.info.action;

import java.util.HashSet;
import java.util.List;

import javax.annotation.Resource;

import cn.edu.hpu.tax.core.action.BaseAction;
import cn.edu.hpu.tax.core.content.Constant;
import cn.edu.hpu.tax.info.entity.Info;
import cn.edu.hpu.tax.info.service.InfoService;

import com.opensymphony.xwork2.ActionContext;

public class InfoAction extends BaseAction {
	@Resource
	private InfoService infoService;
	private List<Info> infoList;
	private Info info;

	//列表页面
	public String listUI() throws Exception{
		try {
			//加载分类集合
			ActionContext.getContext().getContextMap().put("infoTypeMap", Info.INFO_TYPE_MAP);
			infoList=infoService.findObjects();
		} catch (Exception e) {
			throw new Exception(e.getMessage());
		}
		return "listUI";
	}
	//跳转到新增页面
	public String addUI(){
		//加载分类集合
		ActionContext.getContext().getContextMap().put("infoTypeMap", Info.INFO_TYPE_MAP);
		//在进入编辑页面的时候传入当前创建时间
		info=new Info();
		info.setCreateTime(new Timestamp(new Date().getTime()));
		return "addUI";
	}
	//保存新增
	public String add(){
		if(info!=null ){
			infoService.save(info);
		}
		return "list";
	}
	//跳转到编辑界面
	public String editUI(){
		//加载分类集合
		ActionContext.getContext().getContextMap().put("infoTypeMap", Info.INFO_TYPE_MAP);
		if(info!=null && info.getInfoId()!=null){
			info=infoService.findObjectById(info.getInfoId());
		}
		return "editUI";
	}
	//保存编辑
	public String edit(){
		infoService.update(info);
		return "list";
	}
	//删除
	public String delete(){
		if(info!=null && info.getInfoId()!=null){
			infoService.delete(info.getInfoId());
		}
		return "list";
	}
	//批量删除
	public String deleteSelected(){
		if(selectedRow!=null){
			for(String id:selectedRow){
				infoService.delete(id);
			}
		}
		return "list";
	}

	public List<Info> getInfoList() {
		return infoList;
	}
	public void setInfoList(List<Info> InfoList) {
		this.infoList = InfoList;
	}
	public Info getInfo() {
		return info;
	}
	public void setInfo(Info info) {
		this.info = info;
	}
}

接下来使我们的配置文件:
info-spring.xml:

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:p="http://www.springframework.org/schema/p"
	xmlns:context="http://www.springframework.org/schema/context"
	xmlns:aop="http://www.springframework.org/schema/aop" xmlns:tx="http://www.springframework.org/schema/tx"
	xsi:schemaLocation=" http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
	http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-3.0.xsd
	http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-3.0.xsd
	http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.0.xsd">

    <!-- 继承了注入sessionFactory的抽象类,不用反复出入sessionFactory -->
    <bean id="infoDao" class="cn.edu.hpu.tax.info.dao.impl.InfoDaoImpl" parent="xDao"></bean>

    <!-- 扫描Service -->
    <context:component-scan base-package="cn.edu.hpu.tax.info.service.impl"></context:component-scan>
</beans>

info-struts.xml:

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE struts PUBLIC
	"-//Apache Software Foundation//DTD Struts Configuration 2.3//EN"
	"http://struts.apache.org/dtds/struts-2.3.dtd">

<struts>
	<package name="info-action" namespace="/tax" extends="base-default">
		<action name="info_*" class="cn.edu.hpu.tax.info.action.InfoAction" method="{1}">
			<result name="{1}">/WEB-INF/jsp/tax/info/{1}.jsp</result>
			<result name="list" type="redirectAction">
				<param name="actionName">info_listUI</param>
			</result>
		</action>
	</package>
</struts>

然后将info-struts.xml引入到总struts文件中:

<!-- 信息发布的struts配置文件 -->
<include file="cn/edu/hpu/tax/info/conf/info-struts.xml"/>

然后把我们美工做好的jsp页面引进来(addUI.jsp/editUI.jsp/listUI.jsp):
listUI.jsp

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <%@include file="/common/header.jsp"%>
    <title>信息发布管理</title>
    <script type="text/javascript">
  	//全选、全反选
	function doSelectAll(){
		// jquery 1.6 前
		//$("input[name=selectedRow]").attr("checked", $("#selAll").is(":checked"));
		//prop jquery 1.6+建议使用
		$("input[name=selectedRow]").prop("checked", $("#selAll").is(":checked"));
	}
  	//新增
  	function doAdd(){
  		document.forms[0].action = "${basePath}tax/info_addUI.action";
  		document.forms[0].submit();
  	}
  	//编辑
  	function doEdit(id){
  		document.forms[0].action = "${basePath}tax/info_editUI.action?info.infoId=" + id;
  		document.forms[0].submit();
  	}
  	//删除
  	function doDelete(id){
  		document.forms[0].action = "${basePath}tax/info_delete.action?info.infoId=" + id;
  		document.forms[0].submit();
  	}
  	//批量删除
  	function doDeleteAll(){
  		document.forms[0].action = "${basePath}tax/info_deleteSelected.action";
  		document.forms[0].submit();
  	}

    </script>
</head>
<body class="rightBody">
<form name="form1" action="" method="post">
    <div class="p_d_1">
        <div class="p_d_1_1">
            <div class="content_info">
                <div class="c_crumbs"><div><b></b><strong>信息发布管理</strong></div> </div>
                <div class="search_art">
                    <li>
                        信息标题:<s:textfield name="info.title" cssClass="s_text" id="infoTitle"  cssStyle="width:160px;"/>
                    </li>
                    <li><input type="button" class="s_button" value="搜 索" onclick="doSearch()"/></li>
                    <li style="float:right;">
                        <input type="button" value="新增" class="s_button" onclick="doAdd()"/> 
                        <input type="button" value="删除" class="s_button" onclick="doDeleteAll()"/> 
                    </li>
                </div>

                <div class="t_list" style="margin:0px; border:0px none;">
                    <table width="100%" border="0">
                        <tr class="t_tit">
                            <td width="30" align="center"><input type="checkbox" id="selAll" onclick="doSelectAll()" /></td>
                            <td align="center">信息标题</td>
                            <td width="120" align="center">信息分类</td>
                            <td width="120" align="center">创建人</td>
                            <td width="140" align="center">创建时间</td>
                            <td width="80" align="center">状态</td>
                            <td width="120" align="center">操作</td>
                        </tr>
                        <s:iterator value="infoList" status="st">
                            <tr <s:if test="#st.odd"> bgcolor="f8f8f8" </s:if> >
                                <td align="center"><input type="checkbox" name="selectedRow" value="<s:property value='infoId'/>"/></td>
                                <td align="center"><s:property value="title"/></td>
                                <td align="center">
                                	<s:property value="#infoTypeMap[type]"/>
                                </td>
                                <td align="center"><s:property value="creator"/></td>
                                <td align="center"><s:date name="createTime" format="yyyy-MM-dd HH:mm"/></td>
                                <td id="show_<s:property value='infoId'/>" align="center"><s:property value="state==1?'发布':'停用'"/></td>
                                <td align="center">

                                	<a href="#">停用</a>

                                    <a href="javascript:doEdit('<s:property value='infoId'/>')">编辑</a>
                                    <a href="javascript:doDelete('<s:property value='infoId'/>')">删除</a>
                                </td>
                            </tr>
                        </s:iterator>
                    </table>
                </div>
            </div>
        <div class="c_pate" style="margin-top: 5px;">
		<table width="100%" class="pageDown" border="0" cellspacing="0"
			cellpadding="0">
			<tr>
				<td align="right">
                 	总共1条记录,当前第 1 页,共 1 页   
                            <a href="#">上一页</a>  <a href="#">下一页</a>
					到 <input type="text" style="width: 30px;" onkeypress="if(event.keyCode == 13){doGoPage(this.value);}" min="1"
					max="" value="1" />   
			    </td>
			</tr>
		</table>
        </div>

        </div>
    </div>
</form>

</body>
</html>

addUI.jsp

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <%@include file="/common/header.jsp"%>
    <title>信息发布管理</title>

    <script>

    </script>
</head>
<body class="rightBody">
<form id="form" name="form" action="${basePath }tax/info_add.action" method="post" enctype="multipart/form-data">
    <div class="p_d_1">
        <div class="p_d_1_1">
            <div class="content_info">
    <div class="c_crumbs"><div><b></b><strong>信息发布管理</strong> - 新增信息</div></div>
    <div class="tableH2">新增信息</div>
    <table id="baseInfo" width="100%" align="center" class="list" border="0" cellpadding="0" cellspacing="0"  >
        <tr>
            <td class="tdBg" width="200px">信息分类:</td>
            <td><s:select name="info.type" list="#infoTypeMap"/></td>
            <td class="tdBg" width="200px">来源:</td>
            <td><s:textfield name="info.source"/></td>
        </tr>
        <tr>
            <td class="tdBg" width="200px">信息标题:</td>
            <td colspan="3"><s:textfield name="info.title" cssStyle="width:90%"/></td>
        </tr>
        <tr>
            <td class="tdBg" width="200px">信息内容:</td>
            <td colspan="3"><s:textarea id="editor" name="info.content" cssStyle="width:90%;height:160px;" /></td>
        </tr>
        <tr>
            <td class="tdBg" width="200px">备注:</td>
            <td colspan="3"><s:textarea name="info.memo" cols="90" rows="3"/></td>
        </tr>
        <tr>
            <td class="tdBg" width="200px">创建人:</td>
            <td>
            	<s:property value="#session.SYS_USER.name"/>
            	<s:hidden name="info.creator" value="%{#session.SYS_USER.name}"/>
            </td>
            <td class="tdBg" width="200px">创建时间:</td>
            <td>
             	<s:date name="info.createTime" format="yyyy-MM-dd HH:mm"/>
             	<s:hidden name="info.createTime"/>
            </td>
        </tr>
    </table>
    <!-- 默认信息状态为 发布 -->
    <s:hidden name="info.state" value="1"/>
    <div class="tc mt20">
        <input type="submit" class="btnB2" value="保存" />
            
        <input type="button"  onclick="javascript:history.go(-1)" class="btnB2" value="返回" />
    </div>
    </div></div></div>
</form>
</body>
</html>

editUI.jsp

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <%@include file="/common/header.jsp"%>
    <title>信息发布管理</title>

    <script>

    </script>

</head>
<body class="rightBody">
<form id="form" name="form" action="${basePath}tax/info_edit.action" method="post" enctype="multipart/form-data">
    <div class="p_d_1">
        <div class="p_d_1_1">
            <div class="content_info">
    <div class="c_crumbs"><div><b></b><strong>信息发布管理</strong> - 修改信息</div></div>
    <div class="tableH2">修改信息</div>
    <table id="baseInfo" width="100%" align="center" class="list" border="0" cellpadding="0" cellspacing="0"  >
        <tr>
            <td class="tdBg" width="200px">信息分类:</td>
            <td><s:select name="info.type" list="#infoTypeMap"/></td>
            <td class="tdBg" width="200px">来源:</td>
            <td><s:textfield name="info.source"/></td>
        </tr>
        <tr>
            <td class="tdBg" width="200px">信息标题:</td>
            <td colspan="3"><s:textfield name="info.title" cssStyle="width:90%"/></td>
        </tr>
        <tr>
            <td class="tdBg" width="200px">信息内容:</td>
            <td colspan="3"><s:textarea id="editor" name="info.content" cssStyle="width:90%;height:160px;" /></td>
        </tr>
        <tr>
            <td class="tdBg" width="200px">备注:</td>
            <td colspan="3"><s:textarea name="info.memo" cols="90" rows="3"/></td>
        </tr>
        <tr>
            <td class="tdBg" width="200px">创建人:</td>
            <td>
                <s:property value="info.creator"/>
            	<s:hidden name="info.creator"/>
            </td>
            <td class="tdBg" width="200px">创建时间:</td>
            <td>
            	<s:date name="info.createTime" format="yyyy-MM-dd HH:mm"/>
             	<s:hidden name="info.createTime"/>
            </td>
        </tr>
    </table>
    <s:hidden name="info.infoId"/>
    <s:hidden name="info.state"/>
    <div class="tc mt20">
        <input type="submit" class="btnB2" value="保存" />
            
        <input type="button"  onclick="javascript:history.go(-1)" class="btnB2" value="返回" />
    </div>
    </div></div></div>
</form>
</body>
</html>

然后在子系统的frame框架的左边列表(left.jap)加入链接:

<dl>
    <dt><a class="xxfb" href="${ctx }tax/info_listUI.action" target="mainFrame"><b></b>信息发布管理<s class="down"></s>
    </a></dt>
</dl>

之后重启服务器测试;

新增一个信息:

新增成功:

编辑信息:

编辑成功:

删除信息

删除成功!

至此我们信息发布管理的基础增删改查完成了,但是我们还没有完成我们的所有需求,下一篇总结继续完成我们的信息发布管理业务的功能。

转载请注明出处:http://blog.csdn.net/acmman/article/details/49700015

时间: 2024-10-26 03:05:21

【SSH项目实战】国税协同平台-18.信息发布管理需求分析&amp;CRUD的相关文章

【SSH项目实战】国税协同平台-19.信息发布管理完善&amp;amp;ueditor文本编辑插件

我们上次虽然完成了信息发布管理模块基础的增删改查,但是我们还有需求没有完成,其中最重要的一点就是需求上要求我们发布的信息必须是有格式的,word文档那种格式,而我们的原始textarea是清除所有文本格式的,我们在这一次来解决这个问题. 我们使用ueditor插件(百度开发)来解决这个问题,ueditor是一种"父文本编辑器",也叫"在线编辑器",可以使用这种插件来编辑各种格式的文本.(当然还有CKEdit.FckEdit等插件,我们这里使用ueditor插件,因为

【SSH项目实战】国税协同平台-11.角色权限管理1

我们要完成角色管理这一块,首先我们看一下这一块的需求: I.界面描述 II.功能说明 角色管理:可以根据角色名称查询系统用户:在页面中点击"新增"可以添加用户.点击删除可以批量删除选中的用户.在角色列表中显示角色名称.权限.状态.操作:其中操作列中包括编辑.删除两个功能:点击"编辑"则编辑角色信息,删除则删除该角色. 编辑角色:编辑页面包括角色名称.权限列表(可复选多个权限).状态(有效.无效). 角色与权限的关系: 系统中可以存在多个角色,每个角色可以自由的组合系

【SSH项目实战】国税协同平台-12.角色权限管理2

接上一篇http://blog.csdn.net/acmman/article/details/49512903 然后是action层: package cn.edu.hpu.tax.role.action; import java.util.HashSet; import java.util.List; import javax.annotation.Resource; import cn.edu.hpu.tax.core.action.BaseAction; import cn.edu.hp

【SSH项目实战】国税协同平台-1.项目介绍

项目介绍 1.1项目背景 国税协同办公平台包括了行政管理.后勤服务.在线学习.纳税服务.我的空间等几个子系统:我们本次主要的开发功能是纳税服务子系统的部分模块和基于纳税服务子系统信息的个人工作台首页.纳税服务子系统是办税PC前端或移动端的后台管理系统,主要包括的功能有系统角色管理.用户管理.信息发布管理.投诉受理.纳税咨询.易告知.服务预约.服务调查等模块. 系统的主界面: 我们要做的模块界面: 1.2项目前期 项目前期:一般是由客户经理从客户那边了解到有关该项目的招标信息,然后开发公司再组织竞

【SSH项目实战】国税协同平台-14.系统、子系统首页&amp;amp;登录功能1

我们做完了用户与角色的分配,在设置用户在相应的角色下的操作之前,我们先完成用户的登录功能. 首先,我们先加载我们的系统的首页和子首页.很简单,就是转发到一个jsp页面而已,我们先写一个HomeAction来设置跳转功能: package cn.edu.hpu.tax.core.action; import com.opensymphony.xwork2.ActionSupport; public class HomeAction extends ActionSupport{ //跳转到首页 pu

【SSH项目实战】国税协同平台-26.分页功能编写

可以看到,我们之前的用户管理.角色管理和信息发布管理的列表下均有这些东西: 总共1条记录,当前第 1 页,共 1 页    上一页  下一页 到  这个就是美工留给我们做分页的,我们接下来就以信息发布管理模块为例做一个分页功能. 我们在做之前首先分析一下我们分页的规则: 总共1条记录,当前第 1 页,共 1 页    上一页  下一页 到   属性有: 总记录数 当前页号 总页数 页大小 列表记录 使用例子: 共6条记录,每页3条,共2页 总页数 = 总记录数/页大小 共7条记录,每页3条,共3

【SSH项目实战】国税协同平台-27.分页对象应用&amp;amp;抽取pageNavigator

上次我们完成了信息发布管理模块的分页功能.但是我们还没给其它的模块做分页,所以我们也要去完成其它模块的分页功能. 按照我们给信息发布管理模块编写分页功能的方式去编写,需要大费周章,我们不如把分页功能封装起来,这样这些模块包括以后扩充的模块都能使用分页的功能了. 我们回顾一下我们的InfoAction,关于分页的属性有: //分页对象 protected PageResult pageResult; //页号 private int pageNo; //页大小 private int pageSi

【SSH项目实战】国税协同平台-24.条件查询分析与实现

我们之前做好了信息发布管理这一块的功能 这次我们就以这个模块为例,去为其添加查询和分页功能. 我们先从查询功能做起: 条件查询(QueryHelper): 1.查询条件语句hql: from 子句:必定出现:而且只出现一次 where 子句:可选:但关键字where 出现一次:可添加多个查询条件 order by子句:可选:但关键字order by 出现一次:可添加多个排序属性 2.查询条件值集合: 出现时机:在添加查询条件的时候,?对应的查询条件值 例子: FROM Info WHERE ti

【SSH项目实战】国税协同平台-25.查询条件回显

我们上次完成了信息发布管理模块的条件查询功能,但是我们有一些问题没有解决,比如信息的"回显"功能. 解释一下回显,例如你翻到100页,这一页有一个信息需要修改,当你点击修改并修改完毕的时候,发现并没有回到之前的第100页,而是回到了第1页!!你是不是就抓狂了?而且你在输入框中的的查询条件也可能改变或消失,这就是没有做数据回显的后果.所以,我们要为我们的这个模块做数据回显功能. 我们去分类查询的依据就是info.title值,如果有,我们就按照那个排序并列出结果,如果没有我们就去取所有的