jfinal实现jQuery easyUI树的异步加载

发布于 2021-11-29 12:09:47 字数 695 浏览 906 评论 6

@JFinal 你好,想跟你请教个问题:

jfinal如何实现对数据库中数据的遍历,比如有下面的一张表,根据id=0;可以读出parentId=0的两条数据,应该如何操作才能实现对这两条数据的遍历

+-------+--------------+----------+
| id    | name         | parentId |
+-------+--------------+----------+
|     0 | 数据表分类根 | NULL     |
|     1 | 一级数据     |        0 |
|     2 | 二级数据     |        0 |
| 10001 | 基本信息     |        1 |
| 10002 | 教师信息     |        1 |
| 20001 | 基本信息     |        2 |
| 20002 | 教师信息     |        2 |
+-------+--------------+----------+
7 rows in set



如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(6

牵你的手,一向走下去 2021-12-01 06:21:18

我用得好好的,,,你调试一下,看看是哪里的问题~~~

像你 2021-12-01 06:10:19

引用来自“糊搞”的评论

在EasyUi中,树的实现有些麻烦,我给出我写的Kit类,希望对你有帮助:

/**
 * @author hugao
 * 
 */
public final class EasyUiKit {

	/**
	 * EasyUi的grid对象,可用于TreeGrid和DataGrid
	 * 
	 * @author hugao
	 *
	 * @param <M>
	 *            JFinal的Model泛型
	 */
	public static class EasyUiGridObject<M extends Model<?>> {
		/**
		 * Model列表,如果用于TreeGrid,此列表是带有Tree结构的列表。
		 */
		private List<M> rows;

		/**
		 * 总行数
		 */
		private int total;

		/**
		 * 构造方法
		 * 
		 * @param total
		 *            总行数
		 * @param rows
		 *            Model列表
		 */
		public EasyUiGridObject(int total, List<M> rows) {
			this.total = total;
			this.rows = rows;
		}

		public List<M> getRows() {
			return rows;
		}

		public int getTotal() {
			return total;
		}

		public void setRows(List<M> rows) {
			this.rows = rows;
		}

		public void setTotal(int total) {
			this.total = total;
		}
	}

	private static final String EASYUI_GRID_PARENT_ID_NAME = "_parentId";

	private static final String EASYUI_TREE_CHILDREN_NAME = "children";

	private static final String EASYUI_TREE_TEXT_NAME = "text";

	/**
	 * 取得EasyUi的DataGrid控件数据的EasyUiGridObject对象
	 * 
	 * @param page
	 *            JFinal中的Page对象
	 * @return 包装EasyUi的DataGrid控件数据的EasyUiGridObject对象
	 */
	public static <M extends Model<?>> EasyUiGridObject<M> toDataGridObject(Page<M> page) {
		return new EasyUiKit.EasyUiGridObject<M>(page.getTotalRow(), page.getList());
	}

	/**
	 * 取得EasyUi中Tree控件结构的Model列表
	 * 
	 * @param modelList
	 *            包含所有数据的Model列表
	 * @param idFieldName
	 *            Model中ID字段名称
	 * @param parentIdFieldName
	 *            Model中父ID字段名称
	 * @param textFieldName
	 *            Model中名称字段名称,对应EasyUi的Tree控件中的text字段
	 * @param rootIdValue
	 *            根ID字段值
	 * @return 符合EasyUi中Tree控件结构的Model列表
	 */
	public static <M extends Model<?>> List<M> toTree(List<M> modelList, String idFieldName,
			String parentIdFieldName, String textFieldName, Object rootIdValue) {
		return toTree(modelList, idFieldName, parentIdFieldName, textFieldName, rootIdValue, 1);
	}

	/**
	 * 取得EasyUi中Tree控件的子树节点
	 * 
	 * @param modelList
	 *            包含所有数据的Model列表
	 * @param idFieldName
	 *            Model中ID字段名称
	 * @param parentIdFieldName
	 *            Model中父ID字段名称
	 * @param textFieldName
	 *            Model中名称字段名称,对应EasyUi的Tree控件中的text字段
	 * @param parentIdValue
	 *            父ID字段值
	 * @param level
	 *            树层级
	 * @return EasyUi中Tree控件的子树节点
	 */
	private static <M extends Model<?>> List<M> toTree(List<M> modelList, String idFieldName,
			String parentIdFieldName, String textFieldName, Object parentIdValue, int level) {
		List<M> retList = new ArrayList<M>();

		// 循环处理所有model
		for (M m : modelList) {
			// 取得父ID字段值
			Object id = m.get(parentIdFieldName);

			// ID和传入的parentIdValue值是否相等
			if ((parentIdValue == null && id == null)
					|| (parentIdValue != null && parentIdValue.equals(id))) {
				// 如果相等,说明当前Model是子项,直接加入列表
				retList.add(m);

				// 递归地将当前Model的子树求出
				List<M> childrenList = toTree(modelList, idFieldName, parentIdFieldName,
						textFieldName, m.get(idFieldName), level + 1);

				// 子项列表,存放在children字段,此字段为指定字段
				m.put(EASYUI_TREE_CHILDREN_NAME, childrenList);

				// 如果Model中不存在text字段,则填充text字段,因为text字段是Tree控件指定字段
				if (!EASYUI_TREE_TEXT_NAME.equals(textFieldName)) {
					m.put(EASYUI_TREE_TEXT_NAME, m.getStr(textFieldName));
				}
			}
		}

		return retList;
	}

	/**
	 * 取得EasyUi的TreeGrid控件数据的EasyUiGridObject对象
	 * 
	 * @param modelList
	 *            包含所有数据的Model列表
	 * @param parentIdFieldName
	 *            父ID字段名
	 * @param rootIdValue
	 *            根ID字段值
	 * @return 包装EasyUi的TreeGrid控件数据的EasyUiGridObject对象
	 */
	public static <M extends Model<?>> EasyUiGridObject<M> toTreeGridObject(List<M> modelList,
			String parentIdFieldName, Object rootIdValue) {
		for (M m : modelList) {
			Object id = m.get(parentIdFieldName);
			if ((rootIdValue == null && id == null)
					|| (rootIdValue != null && rootIdValue.equals(id))) {
			} else {
				m.put(EASYUI_GRID_PARENT_ID_NAME, m.get(parentIdFieldName));
			}
		}

		return new EasyUiKit.EasyUiGridObject<M>(modelList.size(), modelList);
	}
}

调用方式如下例:

this.renderJson(EasyUiKit.toTree(Permission.dao.find("select * from sys_permission order by order_num"), "id",	"parent_name", "name", null));

平定天下 2021-12-01 06:10:13

引用来自“糊搞”的评论

没明白你的问题,如果是遍历,你给出来的就是全表数据吧。

我觉得你是想问递归求出给定ID及这些ID下的枝叶数据吧,有些数据库无法用一条SQL实现递归,所以得先清楚你用的什么数据库。

秉烛思 2021-12-01 03:32:59

在EasyUi中,树的实现有些麻烦,我给出我写的Kit类,希望对你有帮助:

/**
 * @author hugao
 * 
 */
public final class EasyUiKit {

	/**
	 * EasyUi的grid对象,可用于TreeGrid和DataGrid
	 * 
	 * @author hugao
	 *
	 * @param <M>
	 *            JFinal的Model泛型
	 */
	public static class EasyUiGridObject<M extends Model<?>> {
		/**
		 * Model列表,如果用于TreeGrid,此列表是带有Tree结构的列表。
		 */
		private List<M> rows;

		/**
		 * 总行数
		 */
		private int total;

		/**
		 * 构造方法
		 * 
		 * @param total
		 *            总行数
		 * @param rows
		 *            Model列表
		 */
		public EasyUiGridObject(int total, List<M> rows) {
			this.total = total;
			this.rows = rows;
		}

		public List<M> getRows() {
			return rows;
		}

		public int getTotal() {
			return total;
		}

		public void setRows(List<M> rows) {
			this.rows = rows;
		}

		public void setTotal(int total) {
			this.total = total;
		}
	}

	private static final String EASYUI_GRID_PARENT_ID_NAME = "_parentId";

	private static final String EASYUI_TREE_CHILDREN_NAME = "children";

	private static final String EASYUI_TREE_TEXT_NAME = "text";

	/**
	 * 取得EasyUi的DataGrid控件数据的EasyUiGridObject对象
	 * 
	 * @param page
	 *            JFinal中的Page对象
	 * @return 包装EasyUi的DataGrid控件数据的EasyUiGridObject对象
	 */
	public static <M extends Model<?>> EasyUiGridObject<M> toDataGridObject(Page<M> page) {
		return new EasyUiKit.EasyUiGridObject<M>(page.getTotalRow(), page.getList());
	}

	/**
	 * 取得EasyUi中Tree控件结构的Model列表
	 * 
	 * @param modelList
	 *            包含所有数据的Model列表
	 * @param idFieldName
	 *            Model中ID字段名称
	 * @param parentIdFieldName
	 *            Model中父ID字段名称
	 * @param textFieldName
	 *            Model中名称字段名称,对应EasyUi的Tree控件中的text字段
	 * @param rootIdValue
	 *            根ID字段值
	 * @return 符合EasyUi中Tree控件结构的Model列表
	 */
	public static <M extends Model<?>> List<M> toTree(List<M> modelList, String idFieldName,
			String parentIdFieldName, String textFieldName, Object rootIdValue) {
		return toTree(modelList, idFieldName, parentIdFieldName, textFieldName, rootIdValue, 1);
	}

	/**
	 * 取得EasyUi中Tree控件的子树节点
	 * 
	 * @param modelList
	 *            包含所有数据的Model列表
	 * @param idFieldName
	 *            Model中ID字段名称
	 * @param parentIdFieldName
	 *            Model中父ID字段名称
	 * @param textFieldName
	 *            Model中名称字段名称,对应EasyUi的Tree控件中的text字段
	 * @param parentIdValue
	 *            父ID字段值
	 * @param level
	 *            树层级
	 * @return EasyUi中Tree控件的子树节点
	 */
	private static <M extends Model<?>> List<M> toTree(List<M> modelList, String idFieldName,
			String parentIdFieldName, String textFieldName, Object parentIdValue, int level) {
		List<M> retList = new ArrayList<M>();

		// 循环处理所有model
		for (M m : modelList) {
			// 取得父ID字段值
			Object id = m.get(parentIdFieldName);

			// ID和传入的parentIdValue值是否相等
			if ((parentIdValue == null && id == null)
					|| (parentIdValue != null && parentIdValue.equals(id))) {
				// 如果相等,说明当前Model是子项,直接加入列表
				retList.add(m);

				// 递归地将当前Model的子树求出
				List<M> childrenList = toTree(modelList, idFieldName, parentIdFieldName,
						textFieldName, m.get(idFieldName), level + 1);

				// 子项列表,存放在children字段,此字段为指定字段
				m.put(EASYUI_TREE_CHILDREN_NAME, childrenList);

				// 如果Model中不存在text字段,则填充text字段,因为text字段是Tree控件指定字段
				if (!EASYUI_TREE_TEXT_NAME.equals(textFieldName)) {
					m.put(EASYUI_TREE_TEXT_NAME, m.getStr(textFieldName));
				}
			}
		}

		return retList;
	}

	/**
	 * 取得EasyUi的TreeGrid控件数据的EasyUiGridObject对象
	 * 
	 * @param modelList
	 *            包含所有数据的Model列表
	 * @param parentIdFieldName
	 *            父ID字段名
	 * @param rootIdValue
	 *            根ID字段值
	 * @return 包装EasyUi的TreeGrid控件数据的EasyUiGridObject对象
	 */
	public static <M extends Model<?>> EasyUiGridObject<M> toTreeGridObject(List<M> modelList,
			String parentIdFieldName, Object rootIdValue) {
		for (M m : modelList) {
			Object id = m.get(parentIdFieldName);
			if ((rootIdValue == null && id == null)
					|| (rootIdValue != null && rootIdValue.equals(id))) {
			} else {
				m.put(EASYUI_GRID_PARENT_ID_NAME, m.get(parentIdFieldName));
			}
		}

		return new EasyUiKit.EasyUiGridObject<M>(modelList.size(), modelList);
	}
}

调用方式如下例:

this.renderJson(EasyUiKit.toTree(Permission.dao.find("select * from sys_permission order by order_num"), "id",	"parent_name", "name", null));

离不开的别离 2021-11-30 20:36:11

引用来自“糊搞”的评论

没明白你的问题,如果是遍历,你给出来的就是全表数据吧。

我觉得你是想问递归求出给定ID及这些ID下的枝叶数据吧,有些数据库无法用一条SQL实现递归,所以得先清楚你用的什么数据库。

贱贱哒 2021-11-30 15:23:48

没明白你的问题,如果是遍历,你给出来的就是全表数据吧。

我觉得你是想问递归求出给定ID及这些ID下的枝叶数据吧,有些数据库无法用一条SQL实现递归,所以得先清楚你用的什么数据库。

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文