SSM框架前后端信息交互
一、从前端向后端传送数据
常见的3种方式
1、form表单的action:此方法可以提交form表单内的输入数据,也可同时提交某些隐藏但设置有默认值的<input>,如修改问题时,我们除了提交问题的相关信息,还需要将用户的编号提交给后端,此时就可以设置一个默认值为用户编号的<input>,并将其隐藏
2、<a>标签的href属性:此方法一般用来提交一些较少的数据,比如对象编号
<a href="<%=path%>/Question/DisplayQuestionInfo?question_id=${question.question_id}">${question.question_title}</a>
比如该处代码,显示了问题的标题信息,并将其作为超链接,点击该链接时进入后端Controller类的方法,并向其发送问题编号question_id
3、ajax请求:此方法一般在不需要页面跳转时采用,可以局部刷新页面,比如向后端提交关注某用户的信息,后端收到ajax的请求数据,对数据库进行操作,并通过@Response注解返回信息给前端,然后前端进行相关操作,可以不进行页面跳转
前端部分代码
<script language="JavaScript">
......
function SaveUserFollowUser(){
var login_user_id = ${login_user_id} //登录者(发起者)编号
var user_id = ${user.user_id}; //接受者用户编号 $.ajax({
url:"<%=path%>/UserRelation/SaveUserFollowUser",
type:"POST",
async: false,
contentType:"application/json;charset=UTF-8",
dataType:'json', data:JSON.stringify({"from_user_id":login_user_id,"to_user_id":user_id}), //JSON对象转为字符串
success:function(data){
/* 可在后端增加判断发起者和接受者用户是否是同一用户的判断 */
if (data == true) {
alert("关注成功");
} else {
alert("您已经关注该用户,不可重复关注")
}
}
});
}
</script> ......
<button class="btn btn-success" style="width: 100px" onclick="SaveUserFollowUser()">关注用户</button>
......
后端Controller类
/**
* 表现层 用户关系相关 (关注用户、被用户关注、关注问题、赞同回答)
*/
@Controller
@RequestMapping("/UserRelation")
public class UserRelationController { ...... /**
* 新增某用户关注某用户
* @param map
* @return
*/
@RequestMapping(value = "/SaveUserFollowUser",method = {RequestMethod.POST})
public @ResponseBody Boolean SaveUserFollowUser(@RequestBody Map<String,String> map) { //关注发出者编号
Integer from_user_id = Integer.parseInt(map.get("from_user_id"));
//关注接受者编号
Integer to_user_id = Integer.parseInt(map.get("to_user_id"));
//是否新增成功
//该项可以增加发起者用户和接受者用户是否是同一用户的判断,即比较from_user_id与to_user_id是否相等,如果相等则关注失败
//通过返回Integer类型而非Boolean类型的做判断 本程序并未增加这项判断
Boolean flag = userRelationService.saveUserFollowUser(from_user_id,to_user_id);
return flag;
} ...... }
二、从后端向前端传送数据
1、Model
后端部分代码
/**
* 表现层 用户
*/
@Controller
@RequestMapping(value = "/User")
public class UserController { ...... /**
* 进入个人信息页面
* @param httpSession
* @param model
* @return
*/
@RequestMapping(value = "/DisplayMyInfo")
public String DisplayMyInfo(HttpSession httpSession, Model model) {
Integer user_id = (Integer) httpSession.getAttribute("login_user_id"); //登录者个人编号
User user = userService.findUserById(user_id); //登录者个人信息 model.addAttribute("user",user); //将登录者个人信息返回给前端
return "User/myInfo";
} ...... }
前端部分代码
......
<div class="col-md-6 col-md-offset-5" style="text-align: left;">
<h2>用户名:${user.user_name}</h2>
<h2>用户昵称:${user.user_nickname}</h2>
<h2>用户性别:${user.user_sex}</h2>
<h2>用户邮箱:${user.user_email}</h2>
<h2>用户密码:${user.user_password}</h2>
</div>
......
此时可以通过${}直接取得后端传来的数据
2、ModelAndView
该方法与Model相比,多增加了返回的视图(View),对于返回给前端的具体数据处理类似
SSM框架前后端信息交互的更多相关文章
- ssm框架前后端数据交互完整示例
1.sprinMvc控制层 package com.dengfeng.house.controller; import java.text.ParseException; import java.ut ...
- 两种方法实现asp.net方案的前后端数据交互(aspx文件、html+ashx+ajax)
一个HTML页面只能显示HTML代码信息,不能与数据库进行数据的交互.asp.net方案提供了网页与数据库交互的方法,这里举出两种:①aspx文件 ②ashx文件+ajax技术 一.创建数据库 这里以 ...
- 对GraphQL-BFF:微服务背景下的前后端数据交互方案的研究-------引用
随着多终端.多平台.多业务形态.多技术选型等各方面的发展,前后端的数据交互,日益复杂. 同一份数据,可能以多种不同的形态和结构,在多种场景下被消费. 在理想情况下,这些复杂性可以全部由后端承担.前端只 ...
- Vue在MVC中的进行前后端的交互
Vue在MVC中的进行前后端的交互 Preface: 由于最近在研究前端相关的技术,作为前端非常优秀的框架Vue,个人在学习的过程中遇到一些问题,网上相关资料有限,所以在这这里总结一下个人使用Vue的 ...
- Vue在ASP.NET MVC中的进行前后端的交互
Vue在ASP.NET MVC中的进行前后端的交互 Preface: 由于最近在研究前端相关的技术,作为前端非常优秀的框架Vue,个人在学习的过程中遇到一些问题,网上相关资料有限,所以在这这里总结一下 ...
- web前后端数据交互
前后端数据交互是每一名web程序员必须熟悉的过程,前后端的数据交互重点在于前端是如何获取后端返回的数据,毕竟后端一般情况下只需要将数据封装到一个jsonMap,然后return就完了.下面通过一个li ...
- 前后端数据交互(八)——请求方法 GET 和 POST 区别
WEB 开发同学一看 get 和 post 请求方法的区别,第一感觉都是 So easy! 学习ajax.fetch.axios时,发送网络请求携带参数时,都需要分别处理get和post的参数.所以我 ...
- SpringMVC前后端分离交互传参详细教程
温故而知新,本文为一时兴起写出,如有错误还请指正 本文后台基于SpringBoot2.5.6编写,前端基于Vue2 + axios和微信小程序JS版分别编写进行联调测试,用于理解前后端分离式开发的交互 ...
- vue-resource的使用,前后端数据交互
vue-resource的使用,前后端数据交互 1:导入vue与vue-resource的js js下载: https://pan.baidu.com/s/1fs5QaNwcl2AMEyp_kUg ...
随机推荐
- numpy中的max和maximum
numpy科学计算包中有两个函数np.max()和np.maximum(),他们的功能截然不同.简单而言即前者作用于ndarray对象,求的是它自身的最大.而后者是一个数学上的取$\max$的效果,它 ...
- Zookeeper——基本使用以及应用场景(手写实现分布式锁和rpc框架)
文章目录 Zookeeper的基本使用 Zookeeper单机部署 Zookeeper集群搭建 JavaAPI的使用 Zookeeper的应用场景 分布式锁的实现 独享锁 可重入锁 实现RPC框架 基 ...
- 【JMeter_09】JMeter逻辑控制器__临界部分控制器<Critical Section Controller>
临界部分控制器<Critical Section Controller> 业务逻辑: 根据锁名来控制并发,同一个锁名之下,在同一时间点只能存在一个运行中,适用于控制并发的场景 锁名类型: ...
- 3.kubernetes的CNI网络插件-Flannel
目录 1.1.K8S的CNI网络插件-Flannel 1.1.1.集群规划 1.1.2.下载软件.解压.软链接 1.1.3.最终目录结构 1.1.4.拷贝证书 1.1.5.创建配置 1.1.6.创建启 ...
- Java中时间处理
旧 API:位于 java.util 包中,里面主要有 Date.Calendar.TimeZone 类 新 API:位于 java.time 包中,里面主要有 LocalDateTime.Zoned ...
- zip矩阵转至
list01=[1,2,3,4] list02=["a","b","c","d"] for itme in zip(li ...
- 面试必问系列之JDK动态代理
.katex { display: block; text-align: center; white-space: nowrap; } .katex-display > .katex > ...
- ZooKeeper开机启动的俩种方式
两种方式可以实现开机自启动 第一种:直接修改/etc/rc.d/rc.local文件 在/etc/rc.d/rc.local文件中需要输入两行, 其中export JAVA_HOME=/usr/jav ...
- 1166 - Unknown error 1166[mysql 错误
错误码 1166 原因 字段名因为是复制过来的, 末尾存在了一个空格换行
- [USACO11JAN]Roads and Planes G【缩点+Dij+拓补排序】
题目 Farmer John正在一个新的销售区域对他的牛奶销售方案进行调查.他想把牛奶送到T个城镇 (1 <= T <= 25,000),编号为1T.这些城镇之间通过R条道路 (1 < ...