springboot个人博客的构建(11)详情内容展示

评论信息的提交和回复:

1、我们想到的是非空校验

2、回复别人的时候会出现@Matt

3、提交回复内容后,会刷新之前的页面,把提交的内容遍历出来。

springboot个人博客的构建(11)详情内容展示_第1张图片

 先在博客里面加入两条隐含域:

在post提交信息的时候找到blog的id找到对象的blog对象。然后再把它set进来,再保存。

springboot个人博客的构建(11)详情内容展示_第2张图片

 先把值拿出来,这里两条是自关联。

这里来个表单非空验证:

//评论表单验证
$('.ui.form').form({
  fields: {
    title: {
      identifier: 'content',
      rules: [{
        type: 'empty',
        prompt: '请输入评论内容'
      }
      ]
    },
    content: {
      identifier: 'nickname',
      rules: [{
        type: 'empty',
        prompt: '请输入你的大名'
      }]
    },
    type: {
      identifier: 'email',
      rules: [{
        type: 'email',
        prompt: '请填写正确的邮箱地址'
      }]
    }
  }
});

这里把类型改成按钮,定义一个id;校验表单

springboot个人博客的构建(11)详情内容展示_第3张图片

接下来呢,要把这些信息提交给后台。

springboot个人博客的构建(11)详情内容展示_第4张图片

springboot个人博客的构建(11)详情内容展示_第5张图片

 

接下来 

回复

 

data-commentid="1"是给一个id然后和自关联对应。

 

springboot个人博客的构建(11)详情内容展示_第6张图片

后端:新建了一个控制层

返回一个片段,也就是回复的列表。根据id获取内容。

springboot个人博客的构建(11)详情内容展示_第7张图片

springboot个人博客的构建(11)详情内容展示_第8张图片

 

接下来,就是回复提交框的部分:

springboot个人博客的构建(11)详情内容展示_第9张图片

看控制层:

这里讲之前,我们先定义service。

springboot个人博客的构建(11)详情内容展示_第10张图片

springboot个人博客的构建(11)详情内容展示_第11张图片

springboot个人博客的构建(11)详情内容展示_第12张图片

 

parentCommentId != -1代表不为空,有值。

springboot个人博客的构建(11)详情内容展示_第13张图片

先把父亲的对象拿出来,再放到儿子里。

 

springboot个人博客的构建(11)详情内容展示_第14张图片

springboot个人博客的构建(11)详情内容展示_第15张图片

springboot个人博客的构建(11)详情内容展示_第16张图片

第三节:

当页面加载完后

然后再impl里面:

/**
 * 循环每个顶级的评论节点
 * @param comments
 * @return
 */
private List eachComment(List comments) {
    List commentsView = new ArrayList<>();
    for (Comment comment : comments) {
        Comment c = new Comment();
        BeanUtils.copyProperties(comment,c);
        commentsView.add(c);
    }
    //合并评论的各层子代到第一级子代集合中
    combineChildren(commentsView);
    return commentsView;
}

/**
 *
 * @param comments root根节点,blog不为空的对象集合
 * @return
 */
private void combineChildren(List comments) {

    for (Comment comment : comments) {
        List replys1 = comment.getReplyComments();
        for(Comment reply1 : replys1) {
            //循环迭代,找出子代,存放在tempReplys中
            recursively(reply1);
        }
        //修改顶级节点的reply集合为迭代处理后的集合
        comment.setReplyComments(tempReplys);
        //清除临时存放区
        tempReplys = new ArrayList<>();
    }
}

//存放迭代找出的所有子代的集合
private List tempReplys = new ArrayList<>();
/**
 * 递归迭代,剥洋葱
 * @param comment 被迭代的对象
 * @return
 */
private void recursively(Comment comment) {
    tempReplys.add(comment);//顶节点添加到临时存放集合
    if (comment.getReplyComments().size()>0) {
        List replys = comment.getReplyComments();
        for (Comment reply : replys) {
            tempReplys.add(reply);
            if (reply.getReplyComments().size()>0) {
                recursively(reply);
            }
        }
    }
}

 

springboot个人博客的构建(11)详情内容展示_第17张图片

第四节。

这里要求管理员回复的时候有特别的标记。

首先在评论实体类中添加属性:

springboot个人博客的构建(11)详情内容展示_第18张图片

设置get,set,tostring.

然后看前端博客页面。

springboot个人博客的构建(11)详情内容展示_第19张图片

 

springboot个人博客的构建(11)详情内容展示_第20张图片

如果是管理员就获取管理员的头像。负责就是系统默认的。

springboot个人博客的构建(11)详情内容展示_第21张图片

如果后台过去的用户不为空(是管理员,已经登陆)。那么邮箱框里显示管理员的邮箱。

springboot个人博客的构建(11)详情内容展示_第22张图片

这个时候至于要登陆后,再刷新页面就可以了。

 

 

 

 

 

 

 

 

 

 

 

 

 

你可能感兴趣的:(spring,boot)