关于ajax传值错误问题

项目错误 专栏收录该内容
4 篇文章 0 订阅

最近写东西的时候遇到个问题,下边是错误代码:

严重: Servlet.service() for servlet [DispatcherServlet] in context with path [/OA] threw exception [Request processing failed; nested exception is org.mybatis.spring.MyBatisSystemException: nested exception is org.apache.ibatis.binding.BindingException: Parameter 'user_id' not found. Available parameters are [id, param1]] with root cause
org.apache.ibatis.binding.BindingException: Parameter 'user_id' not found. Available parameters are [id, param1]
    at org.apache.ibatis.binding.MapperMethod$ParamMap.get(MapperMethod.java:165)
    at org.apache.ibatis.reflection.wrapper.MapWrapper.get(MapWrapper.java:44)
    at org.apache.ibatis.reflection.MetaObject.getValue(MetaObject.java:116)

下边的东西太多,上边的错误就能看出来 “user_id”找不到,调试了半小时,最终是搞好了。 问题出在dao方法上,因为使用ajax传值我方法这么写的

//重置密码
    @Update("update t_user set login_password='admin' where user_id=#{user_id}")
    int updatePwd(@Param("id")int id);

把@Param注解去掉就好了,具体什么原因我也不太清楚。 下边代码也贴上 用ajax传值重置密码。 直接UserService代码:

    /**
     * 重置密码admin
     * @param id
     */
    public Map<String,Object> updatePwd(int id) {
        int result=userdao.updatePwd(id);
        Map<String, Object> map=new HashMap<>();
        System.out.println(result+"重置密码");
        if(result>0){
            map.put("status","success");
        }else{
            map.put("status","error");
        }
        return map;
    }

UserController

/**
     * 重置密码
     * @param id
     * @param request
     * @return
     */
    @RequestMapping(value="updatePwd",method=RequestMethod.POST)
    @ResponseBody
    public Map<String,Object> updatePwd(int id) {
        return userservice.updatePwd(id);
    }

jsp页面 这里就粘贴重置这部分 页面使用bootStrap

<div id="loginError" style="text-align:center;color:#cc5965;font-weight:700;margin-bottom:5px;"></div>
    <!-- Collect the nav links, forms, and other content for toggling -->
    <div class="collapse navbar-collapse" id="bs-example-navbar-collapse-1">
       <ul class="nav navbar-nav navbar-right">
        <li class="dropdown">
          <a href="#" class="dropdown-toggle" data-toggle="dropdown" role="button" aria-haspopup="true" aria-expanded="false"><span>${user.user_name}</span><i class="glyphicon glyphicon-user"></i> <span class="caret"></span></a>
          <ul class="dropdown-menu">
            <c:if test="${user!=null}">
                <li><a href="#">个人资料</a></li>
                <li><a href="javascript:Reset();">重置密码</a></li>
                <li><a href="<%=path%>/loginOutput">退出</a></li>
            </c:if>
            <c:if test="${user==null }">
                <li><a href="<%=path%>/loginInput">登录</a></li>
            </c:if>          
          </ul>
        </li>
        </ul>
    </div>

页面效果
这里写图片描述

这里写了个鼠标悬停出现菜单 移除关闭效果 jQuery代码是这样的:

<script type="text/javascript">

//鼠标悬停 自动出现菜单 
    $(document).on("mouseenter",".dropdown",function(){
        $(this).addClass("open");
    })
//鼠标移除 关闭菜单 
    $(document).on("mouseleave",".dropdown",function(){
        $(this).removeClass("open");
    })

</script>

接着传值的问题,在使用js/jquery/ajax是不能直接获取session的值的,在这里使用别的方法获取,首先 登录成功之后把用户对象扔到session里

request.getSession().setAttribute("user", user);

这样就可以了. 但是在JS代码里想获取这个session是可以的 我们可以这么写

var user='<%=request.getSession().getAttribute("user")%>';

这里获取的是user对象 然而并没有什么卵用 里边的属性拿不出来。只能换一种了,可以这么玩:

<input type="hidden" id="userid" name="user_id" value="${user.user_id }"/>

这样就可以了,下边是ajax了。

<script type="text/javascript">
function Reset(){
    var userid=$('#userid').val();
    $.ajax({
        url:'${pageContext.request.contextPath}/updatePwd',
        method:'post',
        data:{
            id:userid
        },
        dataType:'json',
        success:function(ret){
            if(ret.status=='success'){
                $("#loginError").html("重置密码成功!密码为admin !");
                var href = '${pageContext.request.contextPath}/indexInput';
                window.top.location.href = href;
            }else if(ret.status=='error'){
                $("#loginError").html("重置密码失败!请联系管理员!");
            }
        }
    })
}
</script>

到这就完成了,简单粗暴。希望对你们也能有所帮助吧。

  • 0
    点赞
  • 0
    评论
  • 0
    收藏
  • 一键三连
    一键三连
  • 扫一扫,分享海报

©️2021 CSDN 皮肤主题: 大白 设计师:CSDN官方博客 返回首页
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值