springmvc数据绑定笔记、ajax与后台数据交互笔记

9 篇文章 0 订阅
4 篇文章 0 订阅

springmvc数据绑定笔记

 

1.单个参数绑定:@RequestParam(“参数”)

   @ResponseBody

   @RequestMapping("/selectOneUseByEmail")

   //2.传邮箱:单个查找用户

  //项目发布后,访问地址:http://localhost:8888/项目名称/selectOneUseByEmail? userEmail =你要查找的邮箱

   public UserselectOneUseByEmail(@RequestParam("userEmail") String userEmail){

      System.out.println("邮箱是:"+userEmail);

      Useruser=userService.selectOneUseByEmail(userEmail);

      System.out.println(user);

      return user;//单个用户的信息

   }

 

2.对象数据绑定  @ModelAttribute("对象")

   @ResponseBody

   @RequestMapping("/addUser")

   //项目发布后,访问地址:http://localhost:8888/项目名称/addUser? user.name=小明&user.age=16

   public boolean addUser(@ModelAttribute("user")  User user) { 

      boolean flag=userService.addUser(user);

      return flag;

   }

3.List对象数据绑定 

原代码如下,这时候需要做出修改,才能正确传参。

   @ResponseBody

   @RequestMapping("/deleteAllUsers")

   //9.删除所有用户      

   publicboolean deleteAllUsers(List<User> userlist) {

      boolean flag=userService.deleteAllUsers(usersList.getUsersList());

      return flag;

   }

修改:

(1)首先,创建一个绑定数据的类,用来绑定list

package com.hmy.ssh.controller.UserForm;

import java.util.List;

import com.hmy.ssh.bean.User;

public classUserListForm {

   private List<User> usersList;

   public List<User>getUsersList() {

      return usersList;

   }

   public voidsetUsersList(List<User> usersList) {

      this.usersList = usersList;

   }

   @Override

   public String toString() {//记得重写方法

      return "UserListForm [usersList=" + usersList+ "]";

   }

}

(2)可以controller层中的参数

//项目发布后,访问地址:http://localhost:8888/项目名称//deleteAllUsers? user[0].name=小明&user[0].age=16

后会删除

   @ResponseBody

   @RequestMapping("/deleteAllUsers")

   //9.删除所有用户      

// publicboolean deleteAllUsers(List<User> userlist) {

   public boolean deleteAllUsers(UserListForm usersList) {

      boolean flag=userService.deleteAllUsers(usersList.getUsersList());

      return flag;

   }

 

4.两个参数绑定时候:(一个是list,一个是参数)

   @ResponseBody

   @RequestMapping("/updateChooseUsers")

   //http://localhost:8888/项目名称///updateChooseUsers?usersList[0].userName=qq&authority=0

// public  boolean updateUsers(List<User> user,int authority){

   public  boolean  updateUsers(UserListFormusersList,@RequestParam("authority")intauthority)  //http://localhost:8888/MyCourseOnlineProject///updateChooseUsers?usersList[0].userName=admin&authority=0

      //传用户列表:更改指定指定用户列表信息           //成功!

      boolean flag=userService.updateUsers(usersList.getUsersList(),authority);

      return flag;

   }

 

 

5.前端在jsp中,首先要导入json的包,导入jQuery

然后在页面中这样写可以用阿贾克斯ajax来获取后台传的json数据,这样就好方便啦!

<%@ page language="java"import="java.util.*" pageEncoding="utf-8"%>

<%

String path =request.getContextPath();

String basePath =request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";

%>

<!DOCTYPE HTML PUBLIC "-//W3C//DTDHTML 4.01 Transitional//EN">

<html>

 <head>

   <base href="<%=basePath%>">

   

   <title>My JSP 'index.jsp' starting page</title>

   <meta http-equiv="pragma" content="no-cache">

   <meta http-equiv="cache-control" content="no-cache">

   <meta http-equiv="expires" content="0">   

   <meta http-equiv="keywords" content="keyword1,keyword2,keyword3">

   <meta http-equiv="description" content="This is my page">

   <!--

   <linkrel="stylesheet" type="text/css"href="styles.css">

   -->

   <script type="text/javascript" src="<%=basePath %>js/jquery-1.7.2.js"></script>

  <script type="text/javascript">

  $(function(){

      $('#toLogin').click(function() { 

      alert("点击了一次");

        //验证用户名密码

       var truename = $('#truename').val();

        varuserPwd = $('#userPwd').val();

        alert("您的用户名字:"+truename);

        $.ajax({

           type: "POST",

           url: "<%=basePath %>/selectOneUseByTrueName",

           data: {

              truename: truename,

              userPwd: userPwd

           },

           dataType: "text",

           success: function(data) {

              console.log(data);

              //alert("您的用户名字:"+data);

           },

           error: function(jqXHR) {

              alert('failte');

              console.log("发生错误:" +jqXHR.status);

           }

        });

      });  

      });

 functiongetQuetionAgain(event) {

      // 获取题目

      $.ajax({

         type: "get",

         url: "data/exercise.json",

         data: {

            // 题目类型为1

            test: 2,

            length:6

         },

         dataType: "text",

         success: function(data) {

 

            var data = JSON.parse(data);

            var question1 = data.question1;

 

            // 将选择题渲染到页面

            var tag = '';

            for (var i = 0; i <question1.length; i++) {

                var question = question1[i];

                var Bt = '<divclass="change"><div class="changeradio"><inputtype="radio" name="que' + i + '" value="A" >A、'+ question.A + '</div><div class="changeradio"><inputtype="radio" name="que' + i + '" value="B" >B、'+ question.B + '</div><div class="changeradio"><inputtype="radio" name="que' + i + '" value="C" >C、'+ question.C + '</div><div class="changeradio"><inputtype="radio" name="que' + i + '" value="D" >D、'+ question.D + '</div></div>';

 

                // 做到倒数第二条的时候,再次加载题目

                if (i >= (question1.length -2)) {

                   Bt = '<divclass="change getQuetion"><divclass="changeradio"><input type="radio"name="que' + i + '" value="A" >A、'+ question.A + '</div><div class="changeradio"><inputtype="radio" name="que' + i + '" value="B" >B、'+ question.B + '</div><div class="changeradio"><inputtype="radio" name="que' + i + '" value="C" >C、'+ question.C + '</div><div class="changeradio"><inputtype="radio" name="que' + i + '" value="D" >D、'+ question.D + '</div></div>';

                }

 

                tag += '<divclass="question"><div class="questionTitle"><span>'+ (flog + 1) + '、</span><p>'+ question.title + '<spanclass="glyphicon"></span></p></div>' + Bt +'</div>';

                answer.push(question.answer);

                flog++;

            }

           

            $('.getQuetion').removeClass('getQuetion');

            $('#question1Box').html($('#question1Box').html()+tag);

            $("input").change(showAnswer);

            $('.getQuetion').click(getQuetionAgain);

 

         },

         error: function(jqXHR) {

            alert('题目获取失败!请与管理员联系!');

         }

      });

   }

 

 

 

  </script>

 </head>

 <body>

   <form action="<%=basePath %>/selectOneUseByTrueName" method="post">

   <input type="text" name="truename"/>

   <input type="submit" >

   </form>

   

      <div id="lo-form"class="clearfix" >

          <h2>课程在线中心登录页面</h2>

           <p>

             <label for="truename">用户名:</label>

             <input name="user-name"type="text" required="required"placeholder="用户名" id="truename">

           </p>

           <p>

            <label for="userPwd">密码</label>

            <input type="password"name="user-password" placeholder="密码" id="userPwd"> 

           </p>

           <input type="submit"value="登录" id='toLogin'>

           <a href="#">立即注册</a>

        </div> 

 </body>

</html>

 

附上一张前端ajax的设计



个人心得:

1http://localhost:8888/MyCourseOnlineProject///updateChooseUsers?usersList[0].userName=admin&authority=0

其实这些多少个斜杠也是不影响的喔。

2jar包一定不可以冲突,否则会报很多错误的。最好建议用maven去管理如果能用maven管理就用maven吧,真的是不会有这种烦恼。

3spring能达到解耦的效果,记得配置时候要扫描到你的类,路径不能错误,否则是找不到类的

4)返回json数据给前端,无需烦恼在java中转换json类型,直接在配置文件那里写好就可以了。

5hibernatespringmvc 还有spring组合,hibernate可以用正向工程和反向工程。个人觉得反向工程(数据库表生成Java类)会遇到很多错误,但是正向工程(java类生成数据库表)又得写很多字段,怎么解决?

解决方法:

(1)先反向工程,也就是hibernate中先从数据库表中生成java类,

(2)修改生成的字段,那些关联关系不对,那些需要更改,已经知道配置好hibernate了,然后使用正向工程反过来生成数据库表,这样是绝对不对错的喔。(这个已经弄了两天两页,才得出的心得呢)

分享下生成的代码:

添加下边这个类,如果已经配置好hibernate,还有实体类、以及实体类的映射表, 直接执行下边的类就可以实现生成数据库表

package com.hmy.ssh.util;

 

import org.hibernate.cfg.Configuration;

import org.hibernate.tool.hbm2ddl.SchemaExport;

 

//初始化环境工具类,正向创建数据库表

public class InitEvn {

public static voidmain(String[] args) {

    //Hibernate的配置类对象,用于创建SessionFactory.

    Configurationconf = new Configuration().configure();  

    SchemaExport se= new SchemaExport(conf);     

    //正向工程  (是否显示脚本, 是否执行脚本)

    se.create(true,true);

}

}

(6)如果hibernate觉得麻烦,还可以用mybatis.也就是 springmvc+spring+mybatis,也是很好用的喔


  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值