1,在後臺的管理界面經過排序功能直接進入排序界面css
2,在排序界面可以人工的手動拖動須要排序的標題,完成對應的排序以後提交html
3,在app或者是前端就有對應的排序實現了前端
將總體頁面效果展現出來以後如圖所示(頁面點擊肯定以後的效果是與java後臺進行交互的):java
後臺:若是須要將排序的結果保存到數據庫,那麼必需要修改數據庫中對應的起碼一個字段(排序的序號sort),那麼後臺須要至少接收的參數有sort和id兩個字段。我這邊採用的是將這兩個字段封裝到對象,而且採用集合的方式傳遞給後臺,由於對應的修改必須是針對數據庫中須要排序的全部數據的操做。固然能夠根據不一樣的業務實施不一樣的排序方式數據庫
前端:a,實現拖拽功能;b,須要可以提供實時的序列號sort和該序列號指定的idapp
1,下載插件:只需點擊超連接,下載drag.zip並解壓,就會自動轉爲drag.js文件,引用便可框架
2,代碼實現:函數
A>頁面中代碼:post
<!--起始的頁面-->
<div class="listMain">
<div class="addData">
<ul class="dataList" id="dataList${var.ID }">
<c:forEach items="${varList }" var="movieParam" varStatus="varSatus">
<li class="dataList_Child">
<input type="hidden" class="idSort" value="${movieParam.id }" /> <!--id值-->
<p class="datali_name">${movieParam.NAME }</p> <!--頁面中的9999,888,555,333的值-->
<input type="hidden" class="seqSort" /> <!--存放sort序號值的地方-->
</li>
</c:forEach>
</ul>
<input type="button" name="" value="新 增" class="Add_listButton" onclick="addList()">
<input type="button" name="" value="排 序" class="M_sort" onclick="getSortList()" >
</div>
</div>
<!--排序頁面--> <div class="M_sortMain"> <form action="movieparam/editSort.do" method="post"> <div class="M_sortMain_wrap"> <span class="close_M_sortMain"></span> <div class="sortOul"> <ul class="sortOulMain"></ul> </div> </div> <input type="submit" value="提交" class="sort_submit"> </form> </div>
B>點擊排序的時候觸發事件(須要能獲取到當前的序號和id值):this
//點擊排序:1,將當前頁面裝到指定的div;2,給對應的兩個隱藏的input框添加name屬性,便於後臺接收;3,爲sort的隱藏的input賦予sort序號值 function getSortList(){ $(".M_sortMain").css("display","block"); //遮罩頁面顯示 $(".sortOulMain").html($(".listMain").html()); //將當前頁面裝到指定的div $("li").each(function(){ var seq_attr = 'movieParams['+$(this).index()+'].sort'; var id_attr = 'movieParams['+$(this).index()+'].id'; $(this).children(".seqSort").attr('name',seq_attr); //爲序號框添加name屬性 $(this).children(".seqSort").val($(this).index()) //爲sort的隱藏的input賦予sort序號值 $(this).children(".idSort").attr('name',id_attr); //爲id框添加name屬性 }) }
C>拖拽效果的實現,引用了提供的drag.js
// 排序事件中的拖拽事件 $('.sortOulMain').DDSort({ target: 'li', floatStyle: { 'border': '1px solid #ccc', 'background-color': '#fff', 'cursor': 'move' }, //每次拖拽完成以後都會執行的函數 up: function () { $("li").each(function(){ $(this).children(".seqSort").val($(this).index()); //改變全新的sort隱藏的input的序號值 }) } });
後臺採用的就是比較傳統的SSM框架了,主要就是對接收的參數的處理:
A>SpringMVC中只須要注意對於參數的接收必須按照指定的name對應便可(這裏list集合中參數的封裝就再也不強調了):
@RequestMapping("editSeq")
public ModelAndView editSeq(MovieParamListForm movieParamList)throws Exception{ //判空操做這裏省略了 movieParamService.editSeq(movieParamList.getMovieParams()); }
B>Service層的處理省略了,主要是對movieParam中的id和sort兩個字段的操做,直接跳到Mybatis:
<update id="editSeq" parameterType="java.util.List"> <foreach collection="list" item="var" index="index" open="" close="" separator=";"> update t_params <set> sort= #{var.sort} </set> where id= #{var.id} </foreach> </update>
C>若是這時候發現本身的SQL寫的沒有問題可是在執行的時候控制檯仍是報錯了的話,那麼必需要在鏈接數據庫的時候加上這樣一段代碼就好了:allowMultiQueries=true 這個是在操做數據庫批量修改時數據庫的一個問題