开发基于SpringBoot和BootStrap的全栈论坛网站(六):完成个人中心、问题详情和问题编辑

news/2024/5/9 21:16:34/文章来源:https://javayz.blog.csdn.net/article/details/103133266

如果你对这个项目感兴趣,可以从头看起:

开发基于SpringBoot和BootStrap的全栈论坛网站(一):准备阶段

开发基于SpringBoot和BootStrap的全栈论坛网站(二):后端人员如何快速使用BootStrap

开发基于SpringBoot和BootStrap的全栈论坛网站(三):登陆注册以及cookies的功能完成

开发基于SpringBoot和BootStrap的全栈论坛网站(四):完成问题发布功能

开发基于SpringBoot和BootStrap的全栈论坛网站(五):完成首页展示以及分页功能

做完登陆注册功能后先不急着做首页,因为我想的是首页能展示已经发布的问题信息,所以先做一个问题发布功能,前端还是使用BootStrap写,通过官网的组件和布局编写页面。源码会放在文末,源码的开发进度会快于这篇博客。

当做完了之前的所有步骤之后,后续的内容开发就变得相对来说很简单了,总的逻辑都是差不多的,每个用户肯定会有一个个人中心界面,里面存放自己写的问题和收到的回复等等,今天要做的就是编写这个个人中心功能。展示效果如下:

点击右上角小三角,选择我的提问,可以看到自己发布的所有问题,点击每一个问题进入详情界面

目前仅展示问题名称,作者发布时间,内容,如果检测到用户就是作者,可进行编辑操作

点击编辑,进入编辑界面

(一)页面的搭建

首先在导航栏中为我的消息加上href标签

<ul class="dropdown-menu"><li><a href="/personal/questions">我的提问</a></li><li><a href="#">个人资料</a></li><li><a href="/logout">退出登陆</a></li>
</ul>

对于我的消息的布局,依旧使用bootstrap的栅格系统,页面左右比例3:1,问题的展示逻辑和首页类似,只是这里需要增加用户检测,如果问题的发起者就是当前登陆用户,则分页展示,右侧的列表组依旧来自bootstrap官网的组件:

只需要复制代码然后修改成自己的就行,我在这里加了判断逻辑,目的是让当前选中的高亮

<div class="col-lg-3 col-md-12 col-sm-12 col-ss-12"><div class="list-group personal"><a href="/personal/questions" th:class="${section=='questions'}?'list-group-item active' : 'list-group-item' ">我的问题</a><a href="/personal/information" th:class="${section=='information'}?'list-group-item active' : 'list-group-item' ">我的消息</a></div>
</div>

 其余的前端代码见文末源码。

(二)个人中心后端处理逻辑

在controller层建立PersonalController,首先获取当前登陆的用户信息,接着和首页一样在questionService进行处理,返回当前页面需要展示的数据的页码栏情况

//个人中心
@Controller
public class PersonalController {@Resourceprivate UserMapper userMapper;@Resourceprivate QuestionService questionService;@GetMapping("/personal/{action}")public String personal(@PathVariable(name = "action")String action,Model model,HttpServletRequest request,@RequestParam(name = "page",defaultValue = "1")int page,@RequestParam(name = "size",defaultValue = "5")int size){//获取当前用户Cookie[] cookies = request.getCookies();if (cookies == null) {return "login";}User user = null;for (Cookie cookie : cookies) {if (cookie.getName().equals("token")) {String token = cookie.getValue();user = userMapper.findBytoken(token);if (user != null) {request.getSession().setAttribute("user", user);}break;}}//判断action是什么if (action.equals("questions")){model.addAttribute("section","questions");model.addAttribute("sectionname","我的问题");}else if (action.equals("information")){model.addAttribute("section","information");model.addAttribute("sectionname","我的消息");}PageDto pagination=questionService.list(user.getId(),page,size);model.addAttribute("pagination", pagination);return "personal";}
}

questionService.list(user.getId(),page,size);的实现方法:找出来每页需要展示的内容,添加到pageDto中,pageDto中同时还储存页面信息

public PageDto list(int userid, int page, int size) {PageDto pageDto = new PageDto();int totalcount = questionMapper.countbyid(userid);pageDto.setPagination(totalcount,page,size);//size*{page-1}int offset = size * (page - 1);//每页只展示5条//select * from question where createid=#{userid} limit #{offset},#{size}List<Question> questions = questionMapper.listbyid(userid,offset, size);List<Questiondto> questiondtoList = new ArrayList<>();for (Question question : questions) {User user = userMapper.findById(question.getCreateid());Questiondto questiondto = new Questiondto();//把第一个对象的所有属性拷贝到第二个对象中BeanUtils.copyProperties(question, questiondto);questiondto.setUser(user);questiondtoList.add(questiondto);}pageDto.setQuestions(questiondtoList);return pageDto;
}

最后返回给前端的model包含了所有需要展示的内容,前端只需要根据model布局页面即可。

(三)为每个问题做问题详情页

我们现在做的不管是首页还是我的问题中,都无法点击相关问题,为每个问题增加href标签,地址为:http://localhost:8080/question/问题的id,这样就可以通过id知道是哪篇文章

<h4 class="media-heading"><a th:href="@{'/question/'+${question.id}}" th:text="title"></a>
</h4>
<span><a th:text="${question.description}" th:href="@{'/question/'+${question.id}}"></a>
</span>

问题详情页的后端处理逻辑很简单,只需要通过id查询这篇文章和作者即可,我们之前已经创建了问题和用户联立的DTO

@Controller
public class QuestionController {@Resourceprivate QuestionService questionService;@GetMapping("/question/{id}")public String question(@PathVariable(name = "id")int id,Model model){Questiondto questiondto=questionService.getbyid(id);model.addAttribute("questionDto",questiondto);return "question";}
}

对前端的布局不再做过多解释,大家可以看源码。

(四)完成问题编辑功能

问题编辑按钮只有在当前用户等于问题作者时才会出现,因此在前端界面做一个逻辑判断处理:

<a th:href="@{'/publish/'+${questionDto.id}}" th:if="${session.user!=null && session.user.id==questionDto.createid}"><span class="glyphicon glyphicon-pencil question-menu" aria-hidden="true">编辑</span>
</a>

点击编辑过后会跳转到问题发布界面,那如何判断这个时候是要新发布还是编辑更新呢?因此需要设置一个新的属性id来处理这个问题,在publish.html中增加

<input type="hidden" name="id" th:value="${id}">

这条input组件不会出现在页面中,但是传递了id属性,这里的id为问题id,页面编辑控制器代码如下:

@GetMapping("/publish/{id}")
public String edit(@PathVariable(name = "id")int id,Model model){Question question=questionMapper.getbyId(id);model.addAttribute("title", question.getTitle());model.addAttribute("description", question.getDescription());model.addAttribute("tag", question.getTag());//用来标识问题是修改而不是重新创建model.addAttribute("id",question.getId());return "publish";
}

修改此前创建的publishController,在参数中获取id的值,如果为空则附上默认值-1,意思就是如果是第一次创建,id=-1,如果是编辑,id就是问题id

@RequestParam(value = "id",defaultValue = "-1")int id,

根据id的值,执行不同的功能

if(id==-1){questionMapper.createquestion(question);
}else {question.setId(id);questionMapper.updatequestion(question);
}

这样问题编辑功能就完成了。源代码如下:github代码

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.luyixian.cn/news_show_715429.aspx

如若内容造成侵权/违法违规/事实不符,请联系dt猫网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

开发基于SpringBoot和BootStrap的全栈论坛网站(七):完成回复和二级回复功能

论坛的搭建即将进入尾声&#xff0c;完成回复功能后只剩最后一个大功能&#xff1a;通知。然后就是对页面的精修和一些bug的修复&#xff0c;这些不会通过博客来展示&#xff0c;历史博客记录可以看我的实战项目专辑&#xff0c;在这里也不放链接了。 对一个论坛网站来说&…

开发基于SpringBoot和BootStrap的全栈论坛网站(八):完成回复通知的功能

当有人回复了你的问题时&#xff0c;肯定需要有通知能让我们看到&#xff0c;今天就来完成最后一个大功能--回复通知。具体的效果如下&#xff1a; 当有未读通知时&#xff0c;在导航栏上会显示未读通知的数量&#xff0c;点进去后能看到未读的信息&#xff0c;点击每条未读信息…

如何更改PHPCMS网站后台标题(title)

打开PHPCMS安装目录&#xff0c;选择phpcms 然后选择Languages目录&#xff0c;打开。 打开目录后&#xff0c;选择zh-cn目录&#xff0c;选择admin.lang.php用editPlus打开&#xff0c;将第九行后面的引号中的内容换成你想要改变的网站后台标题&#xff0c;保存文件 转载于:ht…

查准考证网站卡了整整一个小时进不去,被抢票支配的恐惧又来了

&#xff08;一&#xff09;概述 今天是国考出准考证的时间&#xff0c;刚好女朋友也要报名了这次考试&#xff0c;作为合格的男朋友当然是要在第一时间将准考证信息下载下来。结果到了半夜12点之后&#xff0c;整个官网一直处于无法连接、502、503、接口报错等各种问题。到了…

搜索引擎登录,网站分类目录登录地址

搜索引擎登录入口 google 如果你的网站是新发布的&#xff0c;或是访问量较低的网站在内容更新时&#xff0c;很有必要主动提交到Google&#xff0c;这样会使网站资料迅速更新倒Google搜索资料库&#xff0c;让用户能及时搜索到你的最新资料。 登录地址&#xff1a;http://www…

基于SpringBoot和BootStrap的全栈论坛网站(附上源码)

耗时大约三个星期不到的时间&#xff0c;把这个论坛项目基本上算是完成了&#xff0c;做这个项目最主要的目的是熟悉SpringBoot的使用&#xff0c;然后通过整个项目了解了BootStrap、Thymeleaf、editor.md等等工具的使用&#xff0c;今天就来做一下总结 &#xff08;一&#x…

一个有意思的网站

http://www.icpoline.com 上面看到一句话&#xff1a;傻的人之所以傻&#xff0c;那就在于他&#xff08;她&#xff09;不知道自己傻&#xff0c;如果他&#xff08;她&#xff09;知道自己傻&#xff0c;那他&#xff08;她&#xff09;就不傻。 所以&#xff0c;我敢断定…

网市场云建站 v4.8 增加私有模版库,开放 Mysql 配置、在线客服源码

开发四年只会写业务代码&#xff0c;分布式高并发都不会还做程序员&#xff1f; 网市场云建站系统&#xff0c;结合各种产品&#xff0c;将一个网站的服务器成本降低到0.1元&#xff01;打破传统建站的高成本&#xff0c;让价格不再是阻碍的门槛&#xff0c;让每个人都能有自…

高并发量网站解决方案

为什么80%的码农都做不了架构师&#xff1f;>>> 最近遇到高并发数据访问的问题&#xff0c;这篇博文讲的比较全面&#xff0c;值得一看。来源参考&#xff1a; http://blog.csdn.net/y_h_t/article/details/6322823 转载于:https://my.oschina.net/garyun/blog/602…

QQ登录网站接入功能实现--非官方文档搬运

背景 最近第一次使用QQ登录功能&#xff0c;期间遇到这种问题&#xff0c;在网上找了很多资料&#xff0c;大多都是官方的搬运&#xff0c;并没有真正的干料&#xff0c;可能是个人能力问题&#xff0c;遇到了各种麻烦&#xff0c;折腾了几天&#xff0c;最终弄好&#xff0c;…

从vancl看垂直商业网站的崛起

从vancl看垂直网站的崛起&#xff08;文&#xff1a;王英雄&#xff09;如果说2007年IT业内的几大事件&#xff0c;卖衬衣的卖火了&#xff0c;这肯定是2007年的重大事件之一。提起卖衬衣的&#xff0c;大家肯定会想到的是PPG&#xff0c;但我为什么不拿PPG做标题呐&#xff1f…

大型网站应用之海量数据和高并发解决方案总结一二

一、网站应用背景 开发一个网站的应用程序&#xff0c;当用户规模比较小的时候&#xff0c;使用简单的&#xff1a;一台应用服务器一台数据库服务器一台文件服务器&#xff0c;这样的话完全可以解决一部分问题&#xff0c;也可以通过堆硬件的方式来提高网站应用的访问性能&…

小白入门:大型网站技术架构负载均衡技术介绍及学习资源推荐

十年间&#xff0c;负载均衡的前沿技术层出不穷&#xff0c;令用户眼花缭乱。经常在技术网站、文档中出现的“四层负载均衡”、“七层负载均衡”字眼有什么含义?有什么区别?对客户网络有哪些不同的优化? 在大型的网站服务器集群中&#xff0c;负载均衡技术是必不可少的。使…

Flex SEO(Search engine optimization),让浏览器找到你的flash站点

Search engine optimistation 也就是让你的站点信息能被“搜索引擎”&#xff08;Google,baidu…&#xff09;搜索到。SEO总分两大类&#xff0c;white hats和black hats&#xff0c;简单讲black hats是一作弊的方法&#xff0c; 例如在meta标签中加一堆重复的关键词&#xff0…

unsharp mark 算法_Google SEO-BERT算法更新

一. BERT介绍BERT的全称为&#xff1a;Bidirectional Encoder Representations from Transformers&#xff0c;基于神经网络的自然语言处理预训练的技术。谷歌说BERT就像是一个超大的同义词系统。2019 年 10 月 25 日&#xff0c;Google 宣布 BERT 更新上线&#xff0c;正式成为…

有些网站打开一半空白_如何发一条空白的朋友圈

所谓空白的朋友圈就是一条看起来没有文字的朋友圈&#xff0c;因为发朋友圈的时候不输入文字是没法发送的。不可见字符是有文字内容的&#xff0c;只是人的肉眼看不见&#xff0c;所以相当于空白。不可见字符不可见字符就是零宽空格&#xff0c;见维基百科解释https://zh.wikip…

另类网站版式设计欣赏

另类网站版式设计欣赏 当你在创建一个新网站的时候&#xff0c;希望这些网站富有个性的版式设计能给你带来灵感。 Popmatik 这是Rob Leach设计制作的一个个人网站&#xff0c;这个网站用了一个瓶子的底图&#xff0c;网站的内容都在瓶子的这个包装纸上。 Digitalmash.com Digi…

大型网站架构系列:负载均衡详解(3)

大型网站架构系列&#xff1a;负载均衡详解&#xff08;3&#xff09; 原文:大型网站架构系列&#xff1a;负载均衡详解&#xff08;3&#xff09;本次分享大纲 软件负载均衡概述Ngnix负载均衡Lvs负载均衡Haproxy负载均衡本次分享总结一、软件负载均衡概述 硬件负载均衡性能优越…

基于Dockfile构建JAVA环境网站镜像

查看本地目录 [rootdocker tomcat]# ls apache-tomcat-8.5.16.tar.gz Dockerfile jdk-8u91-linux-x64.tar.gz server.xml [rootdocker tomcat]# vim Dockerfile FROM centos:7 MAINTAINER zhaochengcheng ADD jdk-8u91-linux-x64.tar.gz /usr/local ENV JAVA_HOME /usr/loca…

linux卸载服务器软件,linux卸载软件命令是什么_网站服务器运行维护,linux

win10系统提示需要提供管理员权限才能更改这些属性怎么办_网站服务器运行维护win10系统提示需要提供管理员权限才能更改这些属性的解决方法是&#xff1a;1、首先打开系统设置&#xff0c;进入【账户】选项&#xff1b;2、然后切换到【家庭和其他用户】&#xff0c;点击【更改账…