關於ajax傳值錯誤問題

最近寫東西的時候遇到個問題,下邊是錯誤代碼:

嚴重: 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>

到這就完成了,簡單粗暴。希望對你們也能有所幫助吧。

發佈了41 篇原創文章 · 獲贊 33 · 訪問量 8萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章