1. 程式人生 > >表格資料的上移與下移功能

表格資料的上移與下移功能

問題】:

在做專案過程中遇到這個需求,根據顯示的需要把列表資料進行上移或者下移的操作。

分析】:

資料庫中有position這個欄位來管理板塊列表顯示的順序,那麼當需要上移時,我們需要取到比它position小的,離它最近的一條資料的position值,並把兩者進行交換即可。

當資料處於第一條資料時,不能在上移;當資料處於最後一條資料時,不能再下移。

實現】:

Service:

		public void moveDown(Long id) {
			Forum forum=getById(id);
			Forum otherForum=(Forum) getSession().createQuery("from Forum f where f.position>? order by f.position desc")
										.setParameter(0, forum.getPosition())
										.setFirstResult(0)
										.setMaxResults(1)
										.uniqueResult();
			//最下面的不能下移
			if(otherForum==null){
				return;
			}
			
			//交換position的值
			int temp=forum.getPosition();
			forum.setPosition(otherForum.getPosition());
			otherForum.setPosition(temp);
			
			//更新到資料庫中
			getSession().update(forum);
			getSession().update(otherForum);
		}
	
		public void moveUp(Long id) {
			Forum forum=getById(id);
			Forum otherForum=(Forum) getSession().createQuery("from Forum f where f.position<? order by f.position asc")
										.setParameter(0, forum.getPosition())
										.setFirstResult(0)
										.setMaxResults(1)
										.uniqueResult();
			//最上面的不能上移
			if(otherForum==null){
				return;
			}
			
			//交換position的值
			int temp=forum.getPosition();
			forum.setPosition(otherForum.getPosition());
			otherForum.setPosition(temp);
			
			//更新到資料庫中
			getSession().update(forum);
			getSession().update(otherForum);
		}
	}
Action:
     /**
		 * 上移
		 */
		public String moveUp() throws Exception{
			forumManageService.moveUp(model.getId());
			return "toList";
		}
	
		/**
		 * 下移
		 */
		public String moveDown() throws Exception{
			forumManageService.moveDown(model.getId());
			return "toList";
		}
頁面顯示jsp:
	 <!-- 最上面的不能上移 -->
	<s:if test="#status.first">
		<span class="disabled">上移</span>
	</s:if>
	<s:else>
		<s:a action="forumManage_moveUp?id=%{id}">上移</s:a>
	</s:else>
						
	<!-- 最下面的不能下移 -->
	<s:if test="#status.last">
		<span class="disabled">下移</span>
	</s:if>
	<s:else>
		<s:a action="forumManage_moveDown?id=%{id}">下移</s:a>
	</s:else>
結果顯示】:

原來樣式:



完成後樣式: