[ssm]ssm中的几种前后端传值方式(ajax,url,form)

  • Post author:
  • Post category:其他


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就是你具体要传的值.这里的值就是在页面直接拿的.就是表单的名字.  比如说<input name=”传输的value”>传输的值</input> <select>之类的也行

第四行数据类型 基本都是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<String,String> map = new HashMap<String,String>();
        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保存数据.

<a class="btn btn-xs btn-success" title="生成工单" onclick="generate('${var.PLAN_ID}');">    
<i class="ace-icon fa fa-share-square-o bigger-120" title="生成工单"></i>
</a>
<input id="PLAN_ID">${var.PLAN_ID}</input>


这里通过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 id="saveGenerate" parameterType="java.util.List" useGeneratedKeys="false">
        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"
            )
        <foreach collection="list" item="item" index="index" separator="UNION ALL">
            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
        </foreach>
    </insert>



版权声明:本文为qq_42056903原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。