web中拖拽排序与java后台交互实现

1、业务需求

  1,在后台的管理界面经过排序功能直接进入排序界面css

  2,在排序界面可以人工的手动拖动须要排序的标题,完成对应的排序以后提交html

  3,在app或者是前端就有对应的排序实现了前端

2、页面展现

  将总体页面效果展现出来以后如图所示(页面点击肯定以后的效果是与java后台进行交互的):java

 3、设计思路:

  后台:若是须要将排序的结果保存到数据库,那么必需要修改数据库中对应的起码一个字段(排序的序号sort),那么后台须要至少接收的参数有sortid两个字段。我这边采用的是将这两个字段封装到对象,而且采用集合的方式传递给后台,由于对应的修改必须是针对数据库中须要排序的全部数据的操做。固然能够根据不一样的业务实施不一样的排序方式数据库

  前端:a,实现拖拽功能;b,须要可以提供实时的序列号sort和该序列号指定的idapp

4、前端设计:

  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="新&nbsp;&nbsp;增" class="Add_listButton" onclick="addList()">
                        <input type="button" name="" value="排&nbsp;&nbsp;序" 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的序号值
                 })
              }
      });    

5、后台设计: 

  后台采用的就是比较传统的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 这个是在操做数据库批量修改时数据库的一个问题

相关文章
相关标签/搜索