JeecgBoot问题汇总

标签: 无 分类: 未分类 创建时间:2023-12-15 11:33:33 更新时间:2024-11-23 10:24:24

1.前言

jeecg-boot 我其实已经研究过了,也成功的应用在了一个小项目上了,但是再次用的时候,还是会出现问题的。

2.Unsatisfied dependency expressed through field ‘onlCgformFieldService’

这个在3.6.1版本中出现了问题,修改了数据库,用户名密码,其他的都没有动,结果后台就启动不了了:”Error creating bean with name ‘onlCgformFieldServiceImpl’: Lookup method resolution failed; nested exception is java.lang.IllegalStateException: Failed to introspect Class [org.jeecg.modules.online.cgform.service.a.c] from ClassLoader [jdk.internal.loader.ClassLoaders$AppClassLoader@6d86b085]”

3.外部 DTD: 无法读取外部 DTD

这个问题很奇怪,就是我在进行文档替换的时候,把很多的mapper替换成了com,结果导致代码跑不起来了,比如:jeecg-module-system/jeecg-system-biz/target/classes/org/jeecg/modules/system/mapper/xml/SysAnnouncementMapper.xml,

4.覆盖默认的redisTemplate

1
2
3
4
5
6
7
8
9
10
11
12
13
// 新建一个bean
@Bean
@Primary
public RedisTemplate<String, Object> redisTemplate2(){

}

// 注入
@Autowired
@Resource(name = "redisTemplate2")
public void setRedisTemplate(RedisTemplate<String, Object> redisTemplate2) {
RedisOpsUtils.redisTemplate = redisTemplate2;
}

4.自定义菜单图标

我尝试了很多的方法,基本上都是vue2的东西,很多的文件都找不到了。

【解决方法】
后来在文档中找了 icon 的值可以在 iconifyNetlify 上查询。我去找了iconify 之后,发现还是有相关的图标,比如我找了 无人机的图标,获取到的类别就是 carbon:drone

(1)找到 src/components/Icon/data/icons.data.ts 文件。

(2)修改文件, 在文件的最后添加图标名称 ‘carbon:drone’

(3)刷新之后,就可以在菜单栏中选择了。

参考文章:
【1】.图标生成 这里只是说了图标集的生成,但是没有说到底怎么引入 iconfont 中的图标
【2】.JeecgBoot(iconfont) Icon图标扩展方法 这里提到的几个文件不存在 在src/views/system/modules/icon/Icons.vue文件中。
【3】.Icon 图标组件 这是官方的说明,但是没有说到底如何引用菜单图标的东西,icon 的值可以在 Iconify或Netlify 上查询。
【4】.jeecgboot自定义菜单图标 jeecgboot版本2.0,ant-design-vue版本1.5.2
【5】.Icon图标扩展方法 这里也是vue2的引入方法
【6】.iconify 在线图标

5.白名单校验未通过

这是新版为了平台安全防止被SQL攻击,针对表字典进行的白名单控制,只有在白名单配置了的表才允许通过表字典的方式访问。

但是我遇到的问题是,我的系统管理里面没有配置表白名单的地方。

【解决方案】
(1)没有白名单配置菜单,后来我发现是因为我的管理员账号没有配置 字典表白名单 的菜单权限。

(2)打开白名单配置菜单,然后添加白名单配置,输入 表名:sys_dict,允许的字段名:dict_name,dict_code,description,然后点击确定就可以了。

参考文章:
【1】.常见问题Q&A 这是新版为了平台安全防止被SQL攻击,针对表字典进行的白名单控制,只有在白名单配置了的表才允许通过表字典的方式访问。
【2】.表白名单配置 1.自动配置。2.手动配置。

6.文件无法上传

在本地测试没有问题,但是打包代码之后,结果就是无法上传文件了,有些电脑上会显示:The file at “” was loaded over an insecure connection. This file should be served over HTTPS. 主要代码:src/utils/http/axios/Axios.ts 文件中。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
/**
* 文件上传
*/
//--@updateBy-begin----author:liusq---date:20211117------for:增加上传回调参数callback------
uploadFile<T = any>(config: AxiosRequestConfig, params: UploadFileParams, callback?: UploadFileCallBack, progress?: Function) {
//--@updateBy-end----author:liusq---date:20211117------for:增加上传回调参数callback------
const formData = new window.FormData();
const customFilename = params.name || 'file';

if (params.filename) {
formData.append(customFilename, params.file, params.filename);
} else {
formData.append(customFilename, params.file);
}
const glob = useGlobSetting();
config.baseURL = glob.uploadUrl;
config.timeout = 0; // 设定永不超时

// 上传进度,主要修改了这个地方
if (isFunction(progress)) {
config.onUploadProgress = (event) => {
progress(event);
};
}

if (params.data) {
Object.keys(params.data).forEach((key) => {
const value = params.data![key];
if (Array.isArray(value)) {
value.forEach((item) => {
formData.append(`${key}[]`, item);
});
return;
}

formData.append(key, params.data[key]);
});
}

return this.axiosInstance
.request<T>({
...config,
method: 'POST',
data: formData,
headers: {
'Content-type': ContentTypeEnum.FORM_DATA,
ignoreCancelToken: true,
},
})
.then((res: any) => {
//--@updateBy-begin----author:liusq---date:20210914------for:上传判断是否包含回调方法------
if (callback?.success && isFunction(callback?.success)) {
callback?.success(res?.data);
//--@updateBy-end----author:liusq---date:20210914------for:上传判断是否包含回调方法------
} else if (callback?.isReturnResponse) {
//--@updateBy-begin----author:liusq---date:20211117------for:上传判断是否返回res信息------
return Promise.resolve(res?.data);
//--@updateBy-end----author:liusq---date:20211117------for:上传判断是否返回res信息------
} else {
if (res.data.success == true && res.data.code == 200) {
createMessage.success(res.data.message);
} else {
createMessage.error(res.data.message);
}
}
});
}

【解决方法】
我看了参考文章【2】,我就尝试了把这个mock关闭,还真是可以的。我修改了 .env.production 文件中的 mock配置,关闭了mock,这个错误就消失了,文件可以上传了。

1
2
# 是否启用mock
VITE_USE_MOCK = false
参考文章:
【1】.jeecgboot图片、视频上传异常 在对应的服务器虚拟机中开放后台端口的入栈、出栈规则(或关闭防火墙)
【2】.解决上传文件报错request.upload.addEventListener 这篇文章提到了Mock的问题,我就尝试了。

7.字段配置下拉框

(1) 在表单开发的页面属性中,选择 “控件类型”,选择 “下拉框”。

(2) 在 “校验字段” 页面,输入 “字典Code” ,填入字典字段。

参考文章:
【1】.下拉框@多选框@单选框
【2】.下拉多选
小额赞助
本人提供免费与付费咨询服务,感谢您的支持!赞助请发邮件通知,方便公布您的善意!
**光 3.01 元
Sun 3.00 元
bibichuan 3.00 元
微信公众号
广告位
诚心邀请广大金主爸爸洽谈合作
每日一省
isNaN 和 Number.isNaN 函数的区别?

1.函数 isNaN 接收参数后,会尝试将这个参数转换为数值,任何不能被转换为数值的的值都会返回 true,因此非数字值传入也会返回 true ,会影响 NaN 的判断。

2.函数 Number.isNaN 会首先判断传入参数是否为数字,如果是数字再继续判断是否为 NaN ,不会进行数据类型的转换,这种方法对于 NaN 的判断更为准确。

每日二省
为什么0.1+0.2 ! == 0.3,如何让其相等?

一个直接的解决方法就是设置一个误差范围,通常称为“机器精度”。对JavaScript来说,这个值通常为2-52,在ES6中,提供了Number.EPSILON属性,而它的值就是2-52,只要判断0.1+0.2-0.3是否小于Number.EPSILON,如果小于,就可以判断为0.1+0.2 ===0.3。

每日三省
== 操作符的强制类型转换规则?

1.首先会判断两者类型是否**相同,**相同的话就比较两者的大小。

2.类型不相同的话,就会进行类型转换。

3.会先判断是否在对比 null 和 undefined,是的话就会返回 true。

4.判断两者类型是否为 string 和 number,是的话就会将字符串转换为 number。

5.判断其中一方是否为 boolean,是的话就会把 boolean 转为 number 再进行判断。

6.判断其中一方是否为 object 且另一方为 string、number 或者 symbol,是的话就会把 object 转为原始类型再进行判断。

每日英语
Happiness is time precipitation, smile is the lonely sad.
幸福是年华的沉淀,微笑是寂寞的悲伤。