EasyUi (三)

TikTok Shop API密钥获取与PHP实战对接指南 本文详细介绍了TikTok Shop API密钥的获取流程与PHP实战对接方法。从开发者后台创建应用、获取核心的API密钥开始,逐步解析OAuth 2.0授权机制,并提供了完整的PHP封装类示例,涵盖签名生成、API调用、令牌刷新及错误处理,帮助开发者快速实现与TikTok Shop的数据对接与自动化操作。 阅读详情

前言

昨天学习了树(tree)形结构
今天来把数据库的表实现到页面上

完成目标
在这里插入图片描述
今天写的时候还遇到个错误

在请求目标中发现无效字符。有效字符在RFC 7230和RFC 3986中定义

在这里插入图片描述
然后百度了下发现这个问题是高版本tomcat中的新特性:就是严格按照 RFC 3986规范进行访问解析,而 RFC 3986规范定义了Url中只允许包含英文字母(a-zA-Z)、数字(0-9)、-_.~4个特殊字符以及所有保留字符(RFC3986中指定了以下字符为保留字符:! * ’ ( ) ; : @ & = + $ , / ? # [ ])。而我们的系统在通过地址传参时,在url中传了一段json,传入的参数中有”{“不在RFC3986中的保留字段中,所以会报这个错。

这里有三种解决方法 我用的第一种

  1. 编辑Tomcat /config/catalina.properties 配置文件,找到 tomcat.util.http.parser.HttpParser.requestTargetAllow=|,解开注释,并配置tomcat.util.http.parser.HttpParser.requestTargetAllow=|{}。(此属性只支持| { } 三种字符)。

在这里插入图片描述
在这里插入图片描述
解决办法2:

最轻便的方法,更换tomcat版本。此方法比较快。

解决办法3:

对相应的参数进行编码,就是将所有的参数都进行编码

-----------参考文章-------------

------------参考文章------------

实现

要实现页面我们要写dao方法 写dao方法要继承basedao 我们需要mvc的架包

首先导入mvc的架包 再把配置文件conf 和下面的mvc.xml也C过来

在这里插入图片描述
在这里插入图片描述

然后写dao方法

package com.zhuchenxi.dao;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import com.fasterxml.jackson.databind.ObjectMapper;
import com.zhuchenxi.entity.Permission;
import com.zhuchenxi.util.BaseDao;
import com.zhuchenxi.util.BuildTree;
import com.zhuchenxi.util.PageBean;
import com.zhuchenxi.vo.TreeVo;

public class PermissionDao extends BaseDao<Permission> {

	/**
	 * 
	 * 是直接从数据库获取到的数据
	 * @param permission
	 * @param pageBean
	 * @return
	 * @throws Exception
	 */
	public List<Permission> list(Permission permission,PageBean pageBean) throws Exception {
		
		String sql="select * from t_easyui_Permission";
		return super.executeQuery(sql, Permission.class, pageBean);
	}
	
	/**
	 * 能够将数据库中的数据,体现夫子结构
	 * @param permission
	 * @param pageBean
	 * @return
	 * @throws Exception
	 */
//	public TreeVo<Permission> topNode(Permission permission,PageBean pageBean) throws Exception {
//		
//		List<Permission> list = this.list(permission, pageBean);
//
//		List<TreeVo<Permission>> nodes = new ArrayList<TreeVo<Permission>>();
//
//		TreeVo treeVo = null;
//		
//		for (Permission p : list) {
//			treeVo = new TreeVo<>();
//			treeVo.setId(p.getId()+"");
//			treeVo.setText(p.getName());
//			treeVo.setParentId(p.getPid()+"");
//			Map<String, Object> attributes = new HashMap<String, Object>();
//			attributes.put("self", p);
//			treeVo.setAttributes(attributes);
//			nodes.add(treeVo);
//		}
//		
//		return BuildTree.build(nodes);
//		
//	}
	public List<TreeVo<Permission>> topNode(Permission permission,PageBean pageBean) throws Exception {
	
		List<Permission> list = this.list(permission, pageBean);
	
		List<TreeVo<Permission>> nodes = new ArrayList<TreeVo<Permission>>();
	
		TreeVo treeVo = null;
		
		for (Permission p : list) {
			treeVo = new TreeVo<>();
			treeVo.setId(p.getId()+"");
			treeVo.setText(p.getName());
			treeVo.setParentId(p.getPid()+"");
			Map<String, Object> attributes = new HashMap<String, Object>();
			attributes.put("self", p);
			treeVo.setAttributes(attributes);
			nodes.add(treeVo);
		}
		
		return BuildTree.buildList(nodes,"0");
	
	}
	
	
	public static void main(String[] args) throws Exception {
		PermissionDao pd = new PermissionDao();
		List<Permission> list = pd.list(null, null);
		
//		通过工具类完成指定格式的输出
		List<TreeVo<Permission>> nodes = new ArrayList<TreeVo<Permission>>();
//		Permission的格式不满足easyui的tree组件的展现的数据格式的
//		将List<Permission>转换成<TreeVo<T>>
//		实现,将List<Permission>得到的单个permission转成TreeVo,将Treev加入到nodes
		
		TreeVo treeVo = null;
		
		for (Permission p : list) {
			treeVo = new TreeVo<>();
			treeVo.setId(p.getId()+"");
			treeVo.setText(p.getName());
			treeVo.setParentId(p.getPid()+"");
//			Map<String, Object> attributes = new HashMap<String, Object>();
//			attributes.put("self", p);
//			treeVo.setAttributes(attributes);
			nodes.add(treeVo);
		}
		
		TreeVo<Permission> parent = BuildTree.build(nodes);
		ObjectMapper om = new ObjectMapper();
		String jsonstr = om.writeValueAsString(parent);
		System.out.println(jsonstr);
		
	}
}

这里面的topNode是来自于辅助类BuildTree String idParam 就是顶级节点需要什么传什么

在这里插入图片描述

然后配置在中央控制器里面

package com.zhuchenxi.web;

import java.util.ArrayList;
import java.util.List;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import com.zhuchenxi.dao.PermissionDao;
import com.zhuchenxi.entity.Permission;
import com.zhuchenxi.framework.ActionSupport;
import com.zhuchenxi.framework.ModelDriven;
import com.zhuchenxi.util.PageBean;
import com.zhuchenxi.vo.TreeVo;
import com.zhuchenxi.util.ResponseUtil;

public class PermissionAction extends ActionSupport implements ModelDriven<Permission>{

	private Permission ps = new Permission();
	private PermissionDao pd = new PermissionDao();
	
	@Override
	public Permission getModel() {
		// TODO Auto-generated method stub
		return ps;
	}
	
	public String menuTree(HttpServletRequest req,HttpServletResponse resp) {
		try {
//			TreeVo<Permission> topNode = this.pd.topNode(null, null);
//			List<TreeVo<Permission>> list = new ArrayList<TreeVo<Permission>>();
//			list.add(topNode);
			ResponseUtil.writeJson(resp, this.pd.topNode(null, null));
		} catch (Exception e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		return null;
	}
	
	
}

在配置路徑

<action path="/permission" type="com.zhuchenxi.web.PermissionAction">
		<!-- <forward name="index" path="/index.jsp" redirect="false" /> -->
	</action>

在主界面上写上input 配置在index.js里面
在这里插入图片描述
在这里插入图片描述

完成效果

在这里插入图片描述

实现 t_easyui_menu 表

照搬就行啦

昨天写过的 就不写实体类了 直接改dao方法

package com.zhuchenxi.dao;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import com.fasterxml.jackson.databind.ObjectMapper;
import com.zhuchenxi.entity.Menu;
import com.zhuchenxi.entity.Permission;
import com.zhuchenxi.util.BaseDao;
import com.zhuchenxi.util.BuildTree;
import com.zhuchenxi.util.PageBean;
import com.zhuchenxi.vo.TreeVo;

public class MenuDao extends BaseDao<Menu>{

	public List<Menu> list(Menu menu,PageBean pageBean) throws Exception {
		String sql="select * from t_easyui_menu where true";
		return super.executeQuery(sql, Menu.class, pageBean);
	}
	
	
	public List<TreeVo<Menu>> topNode(Menu menu,PageBean pageBean) throws Exception {
		
		List<Menu> list = this.list(menu, pageBean);
	
		List<TreeVo<Menu>> nodes = new ArrayList<TreeVo<Menu>>();
	
		TreeVo treeVo = null;
		
		for (Menu p : list) {
			treeVo = new TreeVo<>();
			treeVo.setId(p.getMenuid());
			treeVo.setText(p.getMenuname());
			treeVo.setParentId(p.getParentid());
			Map<String, Object> attributes = new HashMap<String, Object>();
			attributes.put("self", p);
			treeVo.setAttributes(attributes);
			nodes.add(treeVo);
		}
		
		return BuildTree.buildList(nodes,"-1");
	
	}
	
	
	
	
	
	
	public static void main(String[] args) throws Exception {
		MenuDao md = new MenuDao();
		List<Menu> list = md.list(null, null);
		
//		通锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟街革拷锟斤拷锟绞斤拷锟斤拷锟斤拷
		List<TreeVo<Menu>> nodes = new ArrayList<TreeVo<Menu>>();
		
		TreeVo treeVo = null;
		
		for (Menu p : list) {
			treeVo = new TreeVo<>();
			treeVo.setId(p.getMenuid());
			treeVo.setText(p.getMenuname());
			treeVo.setParentId(p.getParentid());
//			Map<String, Object> attributes = new HashMap<String, Object>();
//			attributes.put("self", p);
//			treeVo.setAttributes(attributes);
			nodes.add(treeVo);
		}
		
		TreeVo<Menu> parent = BuildTree.build(nodes);
		ObjectMapper om = new ObjectMapper();
		String jsonstr = om.writeValueAsString(parent);
		System.out.println(jsonstr);
		
		
		
	}
	
}

配置中央控制器

package com.zhuchenxi.web;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import com.zhuchenxi.dao.MenuDao;
import com.zhuchenxi.entity.Menu;
import com.zhuchenxi.framework.ActionSupport;
import com.zhuchenxi.framework.ModelDriven;
import com.zhuchenxi.util.ResponseUtil;

public class MenuAction extends ActionSupport implements ModelDriven<Menu> {

	private  Menu menu = new Menu();
	private  MenuDao md =   new MenuDao();

	@Override
	public Menu getModel() {
		// TODO Auto-generated method stub
		return menu;
	}
	
	
	public String menuTree(HttpServletRequest req,HttpServletResponse resp) {
		try {
//			TreeVo<Permission> topNode = this.pd.topNode(null, null);
//			List<TreeVo<Permission>> list = new ArrayList<TreeVo<Permission>>();
//			list.add(topNode);
			ResponseUtil.writeJson(resp, this.md.topNode(null, null));
		} catch (Exception e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		return null;
	}

}

重点来了 因为在dao方法里调的buidList方法 在index.js里面改下路径 就可以显示页面了 超级方便
在这里插入图片描述

在这里插入图片描述

效果图

在这里插入图片描述

现在思路越来越好了 很高兴 希望能保持下去~~

量化回测框架三选一:Backtrader、Zipline、PyAlgoTrade,新手到底该跟谁学? 本文对比分析了三大量化回测框架Backtrader、Zipline和PyAlgoTrade,帮助新手选择最适合的入门工具。从安装配置、策略编写到文档查阅,详细解析各框架的特点和适用场景,为量化交易初学者提供实用指南。 阅读详情

相关推荐

喷雾破碎模型解析:从理论到CFD应用实践

本文深入解析喷雾破碎模型的理论基础与CFD应用实践,重点介绍KHRT、TAB和ETAB等主流模型的核心原理与工程调参技巧。通过OpenFOAM实例演示和参数优化建议,帮助工程师精准预测液滴破碎行为,提升燃烧效率与排放控制性能,适用于汽车发动机、燃气轮机等工业场景。

weixin_29281915的博客 499

easyui【三】

easyui【三】easyui的crud案列(前后端分离) easyui的crud 1、datagrid布局 2、dialog布局 3、form布局 案列(前后端分离) 后台java工程师的工作:写方法返回数据 前端:只管展示数据 我们需要将数据展示到页面上进行增删查改: 写好dao方法(后台): public class UserDao extends JsonBaseDao{ /** ...

qq_44847231的博客 243

Xilinx Vivado vitis IDE launch Failed \ Web installer client Obsolete 怎么办

Xilinx vitis_IDE failed Web installer client Obsolete

weixin_44820962的博客 8644

EasyUI《三》

今天我们就来了解下 用easyui实现增删查改 在了解之前我们先来说一下开发模式 一、陈旧的开发者模式 美工(ui工程师:出一个项目模型) java工程师:将原有的html转成jsp,动态展示数据 缺点: 客户需要调节前端的展示效果 解决:由美工去重新排版,重新选色。 二、前后端分离模式 美工、java工程师都是独立工作的,彼此之间在开发过程中是没有任何交际。 在开发前约定数据交互的格式。 jav...

byg 375

I2S时序及音频驱动

I2S、音频驱动

qq_41882586的博客 3947

Cocos Creator 2.4 APK逆向实战:如何完整提取游戏资源并还原工程(附工具包)

本文详细介绍了针对Cocos Creator 2.4打包的APK进行逆向工程的完整流程,包括环境搭建、资源索引解析、打包文件提取、图集拆分以及工程结构还原。重点讲解了如何利用config.json和.jsb文件完整提取游戏资源,并生成可被Cocos Creator识别的工程目录与.meta文件,最终实现工程还原的目标。

h3i4j的博客 1494

EasyUI学习总结(三)——EasyUI组件使用

一、EasyUI组件的简单介绍   easyUI提供了很多组件让我们使用,如下图所示:      使用这些组件可以帮助我们快速地进行项目开发,下面以一个用户登录程序为例讲解EasyUI组件的使用 二、EasyUI组件的使用 2.1、创建测试的JavaWeb项目   2.2、编写测试代码 编写一个用户登录页面Login1.html,用于输入用户名和密码

tigerhu256的博客 292

【视频讲解】Python量子计算聚类Q-means:量子k-means算法分析电路数据实现可视化...

全文链接:https://tecdat.cn/?p=37821分析师:Yifan Zhang量子计算在近期已然成为一个频繁出现的热门概念。尽管它在大众认知以及互联网社区中备受瞩目,热度极高,然而就其实际能力而言,当前仍然存在诸多局限(点击文末“阅读原文”获取完整代码数据)。量子计算作为一个全新的领域,带来了相较于传统经典计算模式的重大范式转变。在量子计算的体系中,传统的 0 或 1 的经典比特被一...

拓端研究室TRL 1456

easyui(三)

我们这次用easyui来实现增删改查 我们这次要用到的布局:datagrid、dialog、form布局,用这几个控件完成简单布局,实现前后端分离开发

Make Excellence a Habit 155

基于LightGBM和多模型融合的量化交易研究:沪深300为例【附代码】

📊 数据科学与大数据专业 | 数据分析与模型构建 | 数据驱动决策✨ 专业领域:数据挖掘与清洗大数据处理与存储技术机器学习与深度学习模型数据可视化与报告生成分布式计算与云计算数据安全与隐私保护💡 擅长工具:Python/R/Matlab 数据分析与建模Hadoop/Spark 大数据处理平台SQL数据库管理与优化Tableau/Power BI 数据可视化工具TensorFlow/PyTorch 深度学习框架✅数据科学与大数据技术毕业论文【数据】

lagougongzuoshi的博客 1670

SI案例分享--考虑ESD保护二极管的差分线阻抗仿真

PCB设计中的cut out参考面早已是SI评估中常用的阻抗优化方式,通过合理的仿真建模,可以提供合适的设计参考,并保持与测试结果的高度一致性。

一只豌豆象的博客 1436

EasyUI (三)

今天让我们利用esayui实现增删改查      今日代码基本步骤:            1、datagrid布局           &...

weixin_43939301的博客 221

Python航空航天设计神器!从入门到实操,小白也能搞定飞机优化

AeroSandbox的核心价值的是:​降低航空工程优化的门槛,用Python实现高效、简洁的工程设计​。无论是科研、学习还是实际项目,它都能帮你节省大量时间,不用再手动推导导数、编写复杂的优化逻辑。对于新手来说,建议先从案例1(Rosenbrock函数)入手,熟悉优化流程,再尝试案例2(翼型优化),逐步掌握核心用法;对于有航空相关需求的小伙伴,可以深入研究内置的物理模型,结合自己的项目进行定制化开发。最后,互动时间到!👉 你是用AeroSandbox做科研、练手还是实际项目?

源代码杀手的博客 124

EasyUi(三)

用easyui来实现增删改查方法 1、用easyui的datagrid、dialog、form布局实现前后端代码分离 陈旧的开发模式 美工(ui工程师:出一个项目模型) java工程师:将原有的html转成jsp,动态展示数据 缺点: 客户需要调节前端的展示效果 解决:由美工去重新排版,重新选色。 Vs 前后端分离 美工、java工程师都是独立工作的,彼此之间在开发过程中是没有任何交际。 在开发前...

weixin_45174537的博客 203

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

EasyUI(三)

咱们先了解: easyui的crud(dialog,datagrid、form讲解) 1、datagrid布局 2、dialog布局 3、form布局 4、通用的JsonBaseDao增删改方法 5、dao层 6、web层 7、功能完善 陈旧的开发模式 美工(ui工程师:出一个项目模型) java工程师:将原有的html转成jsp,动态展示数据 缺点: 客户需要调节前端的展示效果 解决:由美工去重...

嗷菌の程序猿学习记录 98

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

easyui(三)

EasyUI显示数据操作数据UserDao.javaUserAction.java 在 easyui(二) 已经实现了如何进行权限管理 接下来使用easyui实现数据的增删查改 首先,在上一篇的博客代码基础上,建立一个jsp页面 <%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding=...

qq_43514335的博客 170

Easyui入门(三)

Easyui入门(三)Tree前端实现Tree前端实现代码排查bug Tree前端实现 不懂得可以从前面看 Column 1 链接 Easyui入门(一) 链接: https://blog.csdn.net/yoonbongchi/article/details/106877642. Easyui入门(二) 链接: https://blog.csdn.net/yoonbongchi/article/details/106889169. 代码 Permission类 packa

yoonbongchi的博客 220

easyui三

陈旧的开发模式 美工(ui工程师:出一个项目模型) java工程师:将原有的html转成jsp,动态展示数据 缺点: 客户需要调节前端的展示效果 解决:由美工去重新排版,重新选色。Vs前后端分离 美工、java工程师都是独立工作的,彼此之间在开发过程中是没有任何交际。 在开发前约定数据交互的格式。 java工程师的工作:写方法返回数据如tree_data1.json 美工:只管展...

weixin_30421809的博客 79

EasyUi(三)

1.easyui的crud(dialog,datagrid、form讲解) 陈旧的开发模式 美工(ui工程师:出一个项目模型) java工程师:将原有的html转成jsp,动态展示数据 缺点: 客户需要调节前端的展示效果 解决:由美工去重新排版,重新选色。 Vs 前后端分离 美工、java工程师都是独立工作的,彼此之间在开发过程中是没有任何交际。 在开发前约定数据交互的格式。 java工程师的工作...

qq_44982547的博客 113

easyui高级控件(三)

easyui高级控件 easyui的crud(dialog,datagrid、form讲解) 1、datagrid布局 2、dialog布局 3、form布局 4、通用的JsonBaseDao增删改方法 5、dao层 6、web层 7、功能完善 陈旧的开发模式 美工(ui工程师:出一个项目模型) java工程师:将原有的html转成jsp,动态展示数据 缺点: 客户需要调节前端的展示效果 解决:由...

qiu_hyun的博客 177

EasyUi高级布局(三)

EasyUi高级布局1.前台1.1,数据表格1.2,弹出框1.3,表单2.后台 今天我就说一说咋们的一个前后端分离,在很多的一些企业里面我们所做的项目都是前后端分离的,也就是说我们前面台展示的界面和我们的数据操控不是同一个人写的,而是两个部门。当然在一些小型的企业里一个人既要干前端的是也要干后台的事。今天我们就来学习一一些简单的前台和后台。 1.前台 我们的前台界面是用easyUI进行开发的,虽然...

what_where的博客 863
上一篇: EasyUi(2)
下一篇: EasyUi之Tabs(选项卡)
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值