SpringBoot新闻管理系统——新闻编辑、修改、发布

要达到的效果:

  • 在新闻管理界面显示所有已发布的新闻集合
  • 可以在列表中对所需要的新闻根据分类和标签进行筛选搜索
  • 可以对已有新闻删除

首先要显示所有新闻,就要从数据库中查找:

1 在dao层接口

@Query("select n from News n where n.recommend=true")
    List<News> findTop(Pageable pageable);

2 Service层条件查找

在Service层中,对新闻根据标签进行筛选:
这里从前端页面获取查询,用find方法进行条件查找,这里用了一个匿名内部类,根据查到的数据Type、Tag、title是否和页面询问的一致来构建predict参数,进行查询。

@Override
    public Page<News> listNew(Pageable pageable, NewQuery newQuery) {
        return newRepository.findAll(new Specification<News>() {
            @Override
            public Predicate toPredicate(Root<News> root, CriteriaQuery<?> cq, CriteriaBuilder cb) {
                List<Predicate> predicates=new ArrayList<>();
                if(!"".equals(newQuery.getTitle()) && newQuery.getTitle()!=null){
                    predicates.add(cb.like(root.<String>get("title"),"%"+newQuery.getTitle()+"%"));
                }
                if(newQuery.getTypeId()!=null){
                    predicates.add(cb.equal(root.get("type").get("id"),newQuery.getTypeId()));
                }
                if(newQuery.isRecommend()){
                    predicates.add(cb.equal(root.get("recommand"),newQuery.isRecommend()));
                }
                cq.where(predicates.toArray(new Predicate[predicates.size()]));
                return null;
            }
        },pageable);
    }

3 Controller层调用方法,传递给前端

两个方法,news是显示当前所有类型以供用户选择、同时分页显示所有新闻。
search方法用来响应搜索请求。

 @GetMapping("/news")
    public String news(@PageableDefault(size=3,sort = {"updateTime"},direction = Sort.Direction.DESC)
                               Pageable pageable, NewQuery newQuery, Model model){
        model.addAttribute("types",typeService.listType());
        model.addAttribute("page",newService.listNew(pageable,newQuery));
        return LIST;
    }

    @PostMapping("/news/search")
    public String search(@PageableDefault(size=3,sort = {"updateTime"},direction = Sort.Direction.DESC)
                               Pageable pageable, NewQuery newQuery, Model model){
        model.addAttribute("page",newService.listNew(pageable,newQuery));
        return "admin/news :: newsList";
    }

4 前端编写

用jquery获取页面中的参数。

function loaddata() {
      $("#table-container").load(/*[[@{/admin/news/search}]]*/"/admin/news/search",{
        title : $("[name='title']").val(),
        typeId : $("[name='typeId']").val(),
        recommend : $("[name='recommend']").prop('checked'),
        page : $("[name='page']").val()
      });
    }

用th循环显示文章内容:

 <tr th:each="news,iterStat : ${page.content}">
            <td th:text="${iterStat.count}">1</td>
            <td th:text="${news.title}">刻意练习清单</td>
            <td th:text="${news.type.name}">认知升级</td>
            <td th:text="${news.recommend} ? '是':'否'"></td>
            <td th:text="${news.published} ? '发布':'草稿'">草稿</td>
            <td th:text="${news.updateTime}">2017-10-02 09:45</td>
            <td>
              <a href="#" th:href="@{/admin/news/{id}/toUpdate(id=${news.id})}" class="ui mini teal basic button">编辑</a>
              <a href="#" th:href="@{/admin/news/{id}/delete(id=${news.id})}" class="ui mini red basic button">删除</a>
            </td>
          </tr>

5 演示

在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/weixin_42189888/article/details/107688728