好得很程序员自学网

<tfoot draggable='sEl'></tfoot>

web中拖拽排序和java后台交互实现方法示例

一、业务需求

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

2,在排序界面能够人工的手动拖动需要排序的标题,完成对应的排序之后提交

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

本文将详细介绍web 拖拽排序 和 java 后台交互的相关内容,下面话不多说了,来一起看看详细的介绍吧

二、页面展示

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

三、设计思路:

后台:如果需要将排序的结果保存到数据库,那么必须要修改数据库中对应的起码一个字段(排序的序号sort),那么后台需要至少接收的参数有sort和id两个字段。我这边采用的是将这两个字段封装到对象,并且采用集合的方式传递给后台,因为对应的修改必须是针对数据库中需要排序的所有数据的操作。当然可以根据不同的业务实施不同的排序方式

前端:a,实现拖拽功能;b,需要能够提供实时的序列号sort和该序列号指定的id

四、前端设计:

1,下载插件:只需点击超链接,下载 drag.zip 并解压,就会自动转为drag.js文件,引用即可

2,代码实现:

 a>页面中代码:

?

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

<!--起始的页面-->

  <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>

?

1

2

3

4

5

6

7

8

9

10

11

12

<!--排序页面-->

        <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值):

?

1

2

3

4

5

6

7

8

9

10

11

12

//点击排序: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

?

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

// 排序事件中的拖拽事件

   $( '.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集合中参数的封装就不再强调了): 

?

1

2

3

4

5

@requestmapping ( "editseq" )

public modelandview editseq(movieparamlistform movieparamlist) throws exception{ 

   //判空操作这里省略了

  movieparamservice.editseq(movieparamlist.getmovieparams());

}

  b>service层的处理省略了,主要是对movieparam中的id和sort两个字段的操作,直接跳到mybatis:

?

1

2

3

4

5

6

7

8

9

<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 这个是在操作数据库批量修改时数据库的一个问题

总结

以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,如果有疑问大家可以留言交流,谢谢大家对的支持。

原文链接:https://HdhCmsTestcnblogs测试数据/bbgs-xc/p/9072327.html

查看更多关于web中拖拽排序和java后台交互实现方法示例的详细内容...

  阅读:13次