69. try {
70. conection.close();
71. } catch (SQLException sqlex) { 72. }
73. conection = null; 74. }
75. }catch(Exception e){ 76. e.printStackTrace(); 77. } 78. }
79. return obj; 80. } 81. 82. /**
83. * 获得指定节点的所有儿子节点 84. * @param id 85. */
86. @SuppressWarnings(\
87. public List
93. conection = DBConn.getConnection(); 94. stmt = conection.createStatement();
95. StringBuffer sql = new StringBuffer(\navigate where parentId = \96. sql.append(id);
97. sql.append(\
98. rs = stmt.executeQuery(sql.toString()); 99. while(rs.next()) 100. {
101. Navigate obj = new Navigate(); 102. obj.setId(rs.getInt(\103. obj.setLeaf(rs.getInt(\104. obj.setNumber(rs.getInt(\
105. obj.setParentId(rs.getInt(\106. obj.setTitle(rs.getString(\107. obj.setUrl(rs.getString(\108. list.add(obj); 109. }
110. }catch(Exception e){
111. e.printStackTrace();
112. }finally{ 113. try{
114. if(rs != null) { 115. try {
116. rs.close();
117. } catch (SQLException e) { 118. }
119. rs = null; 120. } 121. if (stmt != null) { 122. try {
123. stmt.close();
124. } catch (SQLException sqlex) { 125. }
126. stmt = null; 127. }
128. if (conection != null) { 129. try {
130. conection.close();
131. } catch (SQLException sqlex) { 132. }
133. conection = null; 134. }
135. }catch(Exception e){
136. e.printStackTrace(); 137. } 138. }
139. return list; 140. } 141. 142. /**
143. * 保存数据 144. * @param obj 145. */
146. public void save(Navigate obj){
147. StringBuffer sql = new StringBuffer(\avigate(parentId,title,leaf,number,url) values(\148. sql.append(obj.getParentId()); 149. sql.append(\
150. sql.append(obj.getTitle()); 151. sql.append(\
152. sql.append(obj.getLeaf()); 153. sql.append(\
154. sql.append(obj.getNumber());
155. sql.append(\
156. sql.append(obj.getUrl()); 157. sql.append(\
158. this.bulkUpdate(sql.toString()); 159. } 160. 161. /**
162. * 更新数据 163. * @param obj 164. */
165. public void update(Navigate obj){
166. StringBuffer sql = new StringBuffer(\te set\
167. sql.append(\168. sql.append(obj.getParentId()); 169. sql.append(\
170. sql.append(\171. sql.append(obj.getTitle()); 172. sql.append(\
173. sql.append(\174. sql.append(obj.getLeaf()); 175. sql.append(\
176. sql.append(\177. sql.append(obj.getNumber()); 178. sql.append(\179. sql.append(obj.getUrl()); 180. sql.append(\181. sql.append(obj.getId());
182. this.bulkUpdate(sql.toString()); 183. } 184. 185. /**
186. * 异步更新标题 187. * @param id 188. * @param title
189. * @return true-修改成功 false-修改失败 190. */
191. public Boolean ajaxUpdateTitle(Integer id,String title){
192. Boolean flag = false;
193. Navigate obj = this.get(id); 194. if(null != obj){
195. StringBuffer sql = new StringBuffer(\vigate set\
196. sql.append(\197. sql.append(title); 198. sql.append(\
199. sql.append(\200. sql.append(id);
201. this.bulkUpdate(sql.toString()); 202. flag = true; 203. }
204. return flag; 205. } 206. 207. /**
208. * 删除指定的一条数据 209. * @param id 210. */
211. public void removeById(Integer id){
212. StringBuffer sql = new StringBuffer(\avigate where id = \
213. sql.append(id);
214. this.bulkUpdate(sql.toString()); 215. } 216. 217. /**
218. * 异步删除数据,包括其子孙节点 219. * @param id 220. * @param title 221. */
222. @SuppressWarnings(\
223. public void ajaxRemoveNode(Integer id){ 224. List list = this.getChildrenById(id); 225. for (Object object : list) {
226. Navigate obj = (Navigate)object; 227. ajaxRemoveNode(obj.getId()); 228. }
229. this.removeById(id); 230. } 231. 232. /**
233. * 移动指定节点
234. * @param id 指定的节点的id
235. * @param oldParentId 节点移动前所在的父节点 236. * @param newParentId 节点移动后的目标父节点 237. * @param nodeIndex 节点移动后的目标位置 238. */
239. public void ajaxMoveNode(int id, int oldParentId, int newParentId, int nodeIndex){
240. Navigate obj = this.get(id);
241. int minIndex = obj.getNumber().intValue(); 242. int maxIndex = nodeIndex;
243. if(oldParentId == newParentId && minIndex != maxIndex){
244. // 在同一个父节点下发生移动 245. if(minIndex < maxIndex){
246. // 当要移动的节点的序号小于要移动到的目标序号,则下移
247. this.downNode(oldParentId, minIndex, maxIndex);
248. }else if(minIndex > maxIndex){
249. // 当要移动的节点的序号大于要移动到的目标序号,则上移
250. maxIndex = minIndex; 251. minIndex = nodeIndex;
252. this.upNode(oldParentId, minIndex, maxIndex);
253. }
254. // 节点本身的序号设置成要移动到的目标序号 255. obj.setNumber(nodeIndex); 256. this.update(obj); 257. }
258. if(oldParentId != newParentId){ 259. // 在不同父节点下发生移动
260. //1、相当于要移动的节点在原父节点下下移到最后再删除掉,因此要指定移动发生时节点所在的位置
261. this.downNode(oldParentId, minIndex, -1); 262. //2、相当于要移动的节点在新父节点下上移到指定的位置,因此需要指定要移动到的位置
263. this.upNode(newParentId, maxIndex, -1); 264. // 节点本身的序号设置成要移动到的目标序号 265. obj.setNumber(nodeIndex); 266. obj.setParentId(newParentId); 267. this.update(obj); 268. } 269. } 270. /**
271. * 指定的节点下移
272. * @param parentId 指定范围内要移动的节点的父节点 273. * @param minIndex 指定节点移动发生时所在的位置 274. * @param maxIndex 指定节点要移动到的目标位置