zoukankan      html  css  js  c++  java
  • 窗口

    与后端交互,一般需要提交表单数据,所以,这次渲染得dialog其实是一个<form>

    <form id="loginForm">
    <table align="center">
    <tr>
    <th align="right">用户名</th>
    <td>
    <input type="text" name="username"/>
    </td>
    </tr>
    <tr>
    <th align="right">密码</th>
    <td>
    <input type="password" name="password"/>
    </td>
    </tr>
    </table>
    </form>



    使用JS的方式渲染表单为对话框



    <script type="text/javascript">
    var loginForm;//被循环选择的对象提取出来,这样就用选择器选择一次就够了
    $(function () {
    loginForm = $("#loginForm").dialog({
    title: "登陆",
    250,
    height: 150,
    modal: true,
    closable: false,//登录框不允许关闭,所有去掉关闭按钮
    buttons: [
    {
    text: "登陆",
    handler: function () {
    console.log("登陆");
    }
    }, {
    text: "注册",
    handler: function () {
    console.log("注册");
    }
    }
    ]
    });
    })
    </script>




    其实用window组件也能做登录框,但是考虑到如果使用window组件的话,还得自己编写两个(甚至三个)按钮,

    所以就使用dialog,直接使用其buttons属性,在底部渲染出两个按钮。以上,用console.log()的方式模拟了等于与注册的操作。


    那么如何真实的与后端进行交互呢?


    有两种方式
    • 第一种:Ajax
    var formData = {
    username:$("input[name='username']").val(),
    password:$("input[name='password']").val(),
    };
    $.ajax({
    type:"POST",
    url:"<%=homePage%>/testController/login.ajax?type=json",
    dataType:"JSON",//预期服务器返回的数据类型
    contentType:"application/json;charset=UTF-8",//发送的数据类型
    data:JSON.stringify(formData),//将JSON对象转化成JSON的字符串形式
    success:function(data){
    if ("0" == data.st){
    console.log("登陆成功");
    }else{
    console.log("登陆失败");
    }
    }

    })
    对应的后端

    @RequestMapping(value = "/login.ajax",params = "type=json")
    @ResponseBody
    public Map<String,String> login1(@RequestBody Map<String, String> map){
    logger.debug("请求参数:"+map);

    Map<String,String> map1 = login(map);

    return map1;
    }

    说明:前端发送给后端的所有数据,本质上都只可能是字符串,所以,当我在发送Ajax请求的时候,因为指定了 contentType 为 application/json,所以,需要将json对象转换成JSON字符串。而使用Spring MVC作为后端在接收的时候,需要使用@RequestBody注解,该注解将JSON字符串转换成指定的对象,这里转换成了Map

    如果不希望通过JSON字符串发送,则可以如下:
    handler: function () {
    console.log("登陆");
    var formData = {
    username:$("input[name='username']").val(),
    password:$("input[name='password']").val(),
    };
    $.ajax({
    type:"POST",
    url:"<%=homePage%>/testController/login.ajax?type=form",
    dataType:"JSON",//预期服务器返回的数据类型
    data:formData,
    success:function(data){
    if ("0" == data.st){
    console.log("登陆成功");
    }else{
    console.log("登陆失败");
    }
    }

    })
    }



    发送的时候不指定发送的类型,默认是 application/x-www-form-urlencoded; 就是k1=v1&k2=v2 的字符串形式
    后端也要做相应的改动

    @RequestMapping(value = "/login.ajax",params = "type=form")
    @ResponseBody
    public Map<String,String> login2(@RequestParam Map<String, String> map){
    logger.debug("请求参数:"+map);

    Map<String,String> map1 = login(map);
    return map1;
    }
    ajax方法还有很多其他参数,这里就不展开了,详见文档



    上述过程有一个问题,那就是两个表单参数都是自己手动获取的,有没有什么方法,能够获取某个表单中的全部数据呢?答案当然是肯定的

    data:$("#loginForm").serialize(),
    对表单执行 serialize() 方法后,就能够将表单中的输入域全部转化成 k1=v1&k2=v2 的形式传递给后台,Spring MVC通过@RequestParam注解接收(其实不写也行,就使用一个Map或者cmd对象)
    • 第二种:EasyUI的Form表单组件

    见Form组件的使用










  • 相关阅读:
    html固定宽度下拉框内容显示不全问题解决方法
    ORA-00918: column ambiguously defined
    LigerUI可编辑表格左下角出现白色小方块遮罩层问题解决办法
    Lombok简化Java代码的好工具
    PLSQL Developer连接不上64位Oracle 10g的解决办法
    Windows 2008安装Oracle10g提示操作系统版本检查未通过
    Windows2008安装WebSphere 6.1提示此安装程序不能在图形方式中运行
    LigerUI树节点选中之后节点背景太短
    javapms部署之后首页不能正常显示问题
    Oracle触发器给表自身的字段重新赋值出现ORA-04091异常
  • 原文地址:https://www.cnblogs.com/sherrykid/p/6238362.html
Copyright © 2011-2022 走看看