springboot新闻头条标签和新闻功能

这篇博客详细介绍了如何在SpringBoot应用中实现新闻头条的标签管理和新闻发布功能。内容包括创建tags.html和tags-input.html用于展示和新建标签,以及在controller、service和repository层的相应设计。同时,博客还涵盖了news.html和news-input.html的创建,用于新闻展示和创建,涉及到NewsController、NewsService及其实现类的编写。
摘要由CSDN通过智能技术生成

springboot新闻头条标签和新闻功能:

接着上一篇博客

  1. 标签

    • 在admin目录下创建tags.html(展示),tags-input.html(新建输入)

      1、tag.html(大体和types.html类似,修改中间部分,和script部分)

      中间内容

      <!--中间内容-->
        <div  class="m-container-small m-padded-tb-big">
          <div class="ui container">
            <div class="ui success message" th:unless="${#strings.isEmpty(message)}">
              <i class="close icon"></i>
              <div class="header">提示:</div>
              <p th:text="${message}">恭喜,操作成功!</p>
            </div>
            <table class="ui compact teal table">
              <thead>
                <tr>
                  <th></th>
                  <th>名称</th>
                  <th>操作</th>
                </tr>
              </thead>
              <tbody>
                <tr th:each="type,iterStat : ${page.content}">
                  <td th:text="${iterStat.count}">1</td>
                  <td th:text="${type.name}">刻意练习清单</td>
                  <td>
                    <a href="#"  th:href="@{/admin/tags/{id}/toUpdate(id=${type.id})}" class="ui mini teal basic button">编辑</a>
                    <a href="#"  th:href="@{/admin/tags/{id}/delete(id=${type.id})}" class="ui mini red basic button">删除</a>
                  </td>
                </tr>
              </tbody>
              <tfoot>
                <tr>
                  <th colspan="6" >
                    <div class="ui mini pagination menu" th:if="${page.totalPages}>1" >
                      <a  class="  item" th:href="@{/admin/tags(page=${page.number}-1)}" th:unless="${page.first}">上一页</a>
                      <a  class=" item" th:href="@{/admin/tags(page=${page.number}+1)}" th:unless="${page.last}">下一页</a>
                    </div>
                    <a href="#" th:href="@{/admin/tags/input}"  class="ui mini right floated teal basic button">新增</a>
                  </th>
                </tr>
              </tfoot>
            </table>
          </div>
        </div>
      

      2、tags-input.html

      tags.html(大体和types-input.html类似,修改中间部分,和script部分)

      中间内容

      <!--中间内容-->
        <div  class="m-container-small m-padded-tb-big">
          <div class="ui container">
            <!--  i++(一元运算符)  a + b (二元运算符)  三元运算符 表达式 ? 表达式1 :  表达式2-->
            <form action="#" method="post" th:object="${type}" th:action="*{id}==null ? @{/admin/types/add} : @{/admin/types/update/{id}(id=*{id})}" class="ui form">
              <!-- 隐藏域 -->
              <input type="hidden" name="id" th:value="*{id}">
              <div class=" field">
                <div class="ui left labeled input">
                  <label class="ui teal basic label">名称</label>
                  <input type="text" name="name" placeholder="分类名称" th:value="*{name}" >
                </div>
              </div>
      
              <div class="ui error message"></div>
              <!-- 校验当前的输入域是否存在错误 -->
              <div class="ui negative message" th:if="${#fields.hasErrors('name')}">
                <i class="close icon"></i>
                <div class="header">验证失败</div>
                <p th:errors="*{name}">数据错误</p>
              </div>
      
              <div class="ui right aligned container">
                <button type="button" class="ui button" onclick="window.history.go(-1)" >返回</button>
                <button class="ui teal submit button">提交</button>
              </div>
      
            </form>
          </div>
        </div>
      

      script部分

      <script>
      
          $('.menu.toggle').click(function () {
             
            $('.m-item').toggleClass('m-mobile-hide');
          });
      
          $('.ui.dropdown').dropdown({
             
            on : 'hover'
          });
      
          $('.ui.form').form({
             
            fields : {
             
              title : {
             
                identifier: 'name',
                rules: [{
             
                  type : 'empty',
                  prompt: '请输入分类名称'
                }]
              }
            }
          });
      
        </script>
      
    • 在controller层设计TagController类

      package com.myspringboot.demo.web.admin;
      
      import com.myspringboot.demo.entity.Tag;
      import com.myspringboot.demo.service.TagService;
      import org.springframework.beans.factory.annotation.Autowired;
      import org.springframework.data.domain.Pageable;
      import org.springframework.data.domain.Sort;
      import org.springframework.data.web.PageableDefault;
      import org.springframework.stereotype.Controller;
      import org.springframework.ui.Model;
      import org.springframework.validation.BindingResult;
      import org.springframework.web.bind.annotation.*;
      import org.springframework.web.servlet.mvc.support.RedirectAttributes;
      
      @Controller
      @RequestMapping("/admin")
      public class TagController {
             
          @Autowired
          TagService tagService;
      
          @GetMapping("/tags")
          public String tags(@PageableDefault(size = 5, sort = "id",direction = Sort.Direction.DESC) Pageable pageable, Model model) {
             
              model.addAttribute("page", tagService.listTag(pageable));
              return "admin/tags";
          }
      
          // 新增 跳转到新增页面
          @GetMapping("/tags/input")
          public String toAdd(Model model) {
             
              model.addAttribute("tag", new Tag());
              return "admin/tags-input";
          }
      
          @PostMapping("/tags/add")
          public String add(Tag tag, BindingResult result, RedirectAttributes attributes) {
             
              Tag t1 = tagService.getTagByName(tag.getName());
              if (t1 != null) {
             
                  // 当名称重复时  像tag对象中的name属性存放一条 nameError : 不能添加重复的标签名
                  result.rejectValue("name", "nameError", "不能添加重复的标签名");
                  return "admin/tags-input";
              }
      
              // 判断是否保存成功
              Tag t2 = tagService.save(tag);
              if (t2 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值