ssm的几张传值方式.javaweb无非就是前端+后台+数据库 传值就是连接的纽带.
众所周知:jsp/servlet传值无非就是form表单和url,然后servlet里再get到.ssm丰富补充了这几种方式,当然,底层原理都是一样的.
1.前端传值之ajax
ajax是一种传输方案吧,最大的优点就是异步提交,只需要局部刷新.因为我们知道jsp中用form或者url传值都会刷新页面,而且要整个页面数据一起提交,给用户带来了很差的体验.而ajax就完美解决的这个问题.
第一行是传输类型,有post或者get
第二行是传输的url地址 这里是传输到了ssm的controller层去判断
第三行就是要传输的数据 . 这里是以map(key:value)的方式. key就是你传输参数的名字,后台以这个名字接收.value就是你具体要传的值.这里的值就是在页面直接拿的.就是表单的名字. 比如说传输的值
第四行数据类型 基本都是json
第六行就是具体逻辑代码了,写法参照JavaScript,这里也用到了jquery选择器. $是jquer选择器 #form就是id选择.选择页面里id=form的节点. 类似的还有类选择器之类可以去参照我的另一篇博客.https://blog.csdn.net/qq_42056903/article/details/97803169
.sumbit() .hide() .show()都是jquery的方法
$.ajax({
type: "POST",
url: '<%=basePath%>combinationmx/judge.do',
data : {CATEGORY_ID:CATEGORY_ID,TERM_ID:TERM_ID,IS_DEL:IS_DEL,
COMBINATION_ID: COMBINATION_ID,tm:new Date().getTime() },
dataType: "json",
cache: false,
success: function(data){
if("success" == data.result){
$("#Form").submit();
$("#zhongxin").hide();
$("#zhongxin2").show();
}else{
$("#WIG").tips({
side:3,
msg:'该组合已经存在!',
bg:'#AE81FF',
time:3
});
return false;
}
}
});
这里就是controller里的判断逻辑. PageData是封装的map.
public Object judge() throws Exception {
Map map = new HashMap();
String errInfo = "success";
PageData pd = new PageData();
pd = this.getPageData();
pd.put("STATUS", "3");
int count = Integer.parseInt(combinationmxService.findSame(pd).get("zs").toString());
if(count>0) {
errInfo = "error";
}
map.put("result", errInfo); //返回结果
return AppUtil.returnObject(new PageData(), map);
}
2.前端从数据库取值
这里要科普下ssm的架构MVC 视图层view(jsp) 控制层(Controller) Service层 Dao层(Mapper)
所以很显然,前端要从数据库拿值,必须经过Controller层和Service层.
首先用一个List保存从Service传来的数据.这里调用Service层的方法返回一个list的值.Service里会有具体连接mybatis的方法.
然后把list保存到mv里. ModelAndView来自springMVC框架,所有信息保存在mv里传输到jsp.
下面是一个下拉菜单的demo.
这里的${}是一个el表达式.
3.前端传值之url
jsp层:
先从数据库拿值 这里是把数据放在onclick()方法里,当然你也可以写一个隐藏的input保存数据.
${var.PLAN_ID}
这里通过url把参数传递出去
function generate(Id){
bootbox.confirm("确定要生成工单吗?", function(result) {
if(result) {
top.jzts();
var url = "<%=basePath%>plan/generate.do?PLAN_ID="+Id+"&tm="+new Date();
$.get(url,function(data){
nextPage(${page.currentPage});
});
}
});
}
Controller层:
PageData封装了来自jsp的所有数据 我们的planid也在里面
@RequestMapping(value="/generate")
public void generate(PrintWriter out) throws Exception{
if(!Jurisdiction.buttonJurisdiction(menuUrl, "del")){return;} //校验权限
PageData pd = this.getPageData();
Object object=planService.findNumber(pd).get("zs");
int number=Integer.parseInt(String.valueOf(object));
Calendar cal = Calendar.getInstance();
int year = cal.get(Calendar.YEAR);
int month = cal.get(Calendar.MONTH)+1;
int day = cal.get(Calendar.DATE);
int newOutsourceStaffId =number+1;//获取流水号
String ordernumber=String.valueOf(year)+String.valueOf(month)+String.valueOf(day)+String.valueOf(newOutsourceStaffId);
String currentUserId = Jurisdiction.getUsername();
String nowStr = Tools.date2Str(new Date());
pd.put("IS_DEL", 0);//删除标识
pd.put("CHECKORDER_ID", this.get32UUID());
pd.put("CREATE_BY",currentUserId); //创建者
pd.put("LAST_MODIFY_BY", currentUserId);//修改者
pd.put("CREATE_TIME", nowStr);//创建时间
pd.put("LAST_MODIFY_TIME", nowStr);//修改时间
pd.put("ordernumber", ordernumber);//工单号
planService.savegenerate(pd);
out.write("success");
out.close();
}
Service层:
传入参数就是之前的PageData
public void savegenerate(PageData pd) throws Exception {
PageData order = new PageData();
order.put("PLAN_ID", pd.getString("PLAN_ID"));
}
Mapper层:
INSERT INTO
CHECK_CHECKORDER
(
"CREATE_BY",
"CREATE_TIME",
"LAST_MODIFY_BY",
"LAST_MODIFY_TIME",
"ORDER_NUM",
"CHECKORDER_ID",
"IS_DEL",
"LEVEL",
"SHOULD_BE_CHECKER_ID",
"SHOULD_BE_CHECK_TIME",
"PLAN_ID"
)
SELECT
#{item.CREATE_BY},
#{item.CREATE_TIME},
#{item.LAST_MODIFY_BY},
#{item.LAST_MODIFY_TIME},
#{item.ORDER_NUM},
#{item.CHECKORDER_ID},
#{item.IS_DEL},
#{item.LEVEL},
#{item.SHOULD_BE_CHECKER_ID},
#{item.SHOULD_BE_CHECK_TIME},
#{item.PLAN_ID}
FROM DUAL