🚀 Hi, I'm YuePeng,a passionate self-taught backend developer from China.
I love to make friends. so if you want to say hi, I'll be happy to meet you more! 😊
🚀 General data management framework, objects are pages
Home Page: https://www.erupt.xyz
License: Apache License 2.0
JDK版本: openjdk_8_201
erupt版本: 1.X.X (请确保最新尝试是否还有问题)
复现代码
堆栈信息
测试涉及到的文件(注意脱密)
可参考
public static String getClientIp(@NonNull ServerHttpRequest request) {
String ip = null;
HttpHeaders headers = request.getHeaders();
try {
ip = headers.getFirst("X-Real-IP");
if (StringUtils.isEmpty(ip) || "unknown".equalsIgnoreCase(ip)) {
ip = headers.getFirst("x-forwarded-for");
}
if (org.apache.commons.lang.StringUtils.isEmpty(ip) || "unknown".equalsIgnoreCase(ip)) {
ip = headers.getFirst("Proxy-Client-IP");
}
if (StringUtils.isEmpty(ip) || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) {
ip = headers.getFirst("WL-Proxy-Client-IP");
}
if (org.apache.commons.lang.StringUtils.isEmpty(ip) || "unknown".equalsIgnoreCase(ip)) {
ip = headers.getFirst("HTTP_CLIENT_IP");
}
if (org.apache.commons.lang.StringUtils.isEmpty(ip) || "unknown".equalsIgnoreCase(ip)) {
ip = headers.getFirst("HTTP_X_FORWARDED_FOR");
}
if (org.apache.commons.lang.StringUtils.isEmpty(ip) || "unknown".equalsIgnoreCase(ip)) {
ip = Objects.requireNonNull(request.getRemoteAddress()).getAddress().getHostAddress();
}
} catch (Exception e) {
log.error("IPUtils ERROR ", e);
}
//使用代理,则获取第一个IP地址
if(!StringUtils.isEmpty(ip) && ip.length() > 15) {
if(ip.indexOf(",") > 0) {
ip = ip.substring(0, ip.indexOf(","));
}
}
return ip;
}
例如:添加的是
http://www.test.com:8888/Report/Server?reportlet=test.frm&op=view
跳转后,?reportlet=test.frm&op=view 会被忽略。
只跳到http://www.test.com:8888/Report/Server
RT
JDK版本: zuul_11.0.14
erupt版本: 1.10.14 (请确保最新尝试是否还有问题)
amis.html?code=test1
amis.html?code=test2
访问菜单时,访问测试1,页面正常,再访问测试2,地址栏有变化,但是页面没有刷新
堆栈信息
测试涉及到的文件(注意脱密)
提个问题,比如有个标签表,一个商品表,
一个商品可以选择多个标签,
商品列表要显示商品关联的多个标签,这种应该怎么配置呢?
JDK版本: openjdk_17_03
erupt版本: 1.10.10
初始化执行时调用了spring boot - jdbc-template
这部分与JPA 对 hibernate的配置定义存在冲突,hibernate 配置了default_schema时,建表语句会自动关联schema,但是
UpmsDataLoadService line:52 开始调用的jdbc 无法正常执行,此处需统一使用jpa执行。
JDK版本: openjdk_8_211
erupt版本: 1.10.4 (请确保最新尝试是否还有问题)
谢谢
JDK版本: openjdk_8_201
erupt版本: 1.8.x
按找快速上手的指引,https://www.yuque.com/yuepeng/erupt/waztcb
启动后,报错
D:\studio\erupt-example\src\main\java\Simple.java:56:13
java: 找不到符号
符号: 类 Date
位置: 类 xyz.demo.erupt.example.model.Simple
把这一段
//时间选择
@EruptField(
views = @view(title = "时间"),
edit = @edit(title = "时间")
)
private Date date;
删了就ok
是哪里问题?
JDK版本: JDK1.8
erupt版本: 1.7.1
addBehavior中,对String类型下拉框赋值有效,对Integer类型下拉框赋值无效
复现代码
堆栈信息
测试涉及到的文件(注意脱密)
JDK版本: openjdk_15
erupt版本: 1.6.16
@EruptField(
views = @View(title = "状态",type = ViewType.TEXT),
edit = @Edit(title = "状态",type = EditType.CHOICE,
choiceType = @ChoiceType(
fetchHandler = StateFetchHandler.class
)
)
)
@Enumerated(EnumType.STRING)
private State state;
JDK版本: openjdk 11.0.12
erupt版本: 1.10.13
日期时间只能格式化到秒级,如果需要毫秒级的格式化无效
@EruptField(
views = @View(title = "时间", type = ViewType.DATE_TIME),
edit = @Edit(title = "时间"
, readonly = @Readonly()
, dateType = @DateType(type = DateType.Type.DATE_TIME)
, search = @Search(vague = true)
)
)
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss.SSS")
private Date winningTime;
日期格式化需要精确到毫秒级别。
如果是我使用不当,望指正
Menu标签切换,自定义页面(iframe)会重新加载
目前很多系统的登录一般不单一依赖于本地认证,希望可以提供对接例如cas单点登录
JDK版本: JDK1.8
erupt版本: 1.7.1
主子表都继承了HyperModelVo
OneToMany模式下,
主表可以自动注入create_user_id/update_user_id/create_time/update_time
子表没有自动注入
复现代码
堆栈信息
测试涉及到的文件(注意脱密)
JDK版本: openjdk_17_03
erupt版本: 1.10.10
com.google.gson.JsonIOException: Failed making field 'java.lang.ThreadLocal#threadLocalHashCode' accessible; either change its visibility or write a custom TypeAdapter for its declaring type
at com.google.gson.internal.reflect.ReflectionHelper.makeAccessible(ReflectionHelper.java:22)
at com.google.gson.internal.bind.ReflectiveTypeAdapterFactory.getBoundFields(ReflectiveTypeAdapterFactory.java:158)
at com.google.gson.internal.bind.ReflectiveTypeAdapterFactory.create(ReflectiveTypeAdapterFactory.java:101)
at com.google.gson.Gson.getAdapter(Gson.java:501)
at com.google.gson.internal.bind.ReflectiveTypeAdapterFactory.createBoundField(ReflectiveTypeAdapterFactory.java:116)
at com.google.gson.internal.bind.ReflectiveTypeAdapterFactory.getBoundFields(ReflectiveTypeAdapterFactory.java:165)
at com.google.gson.internal.bind.ReflectiveTypeAdapterFactory.create(ReflectiveTypeAdapterFactory.java:101)
at com.google.gson.Gson.getAdapter(Gson.java:501)
at com.google.gson.internal.bind.ReflectiveTypeAdapterFactory.createBoundField(ReflectiveTypeAdapterFactory.java:116)
at com.google.gson.internal.bind.ReflectiveTypeAdapterFactory.getBoundFields(ReflectiveTypeAdapterFactory.java:165)
at com.google.gson.internal.bind.ReflectiveTypeAdapterFactory.create(ReflectiveTypeAdapterFactory.java:101)
at com.google.gson.Gson.getAdapter(Gson.java:501)
at com.google.gson.internal.bind.ReflectiveTypeAdapterFactory.createBoundField(ReflectiveTypeAdapterFactory.java:116)
at com.google.gson.internal.bind.ReflectiveTypeAdapterFactory.getBoundFields(ReflectiveTypeAdapterFactory.java:165)
at com.google.gson.internal.bind.ReflectiveTypeAdapterFactory.create(ReflectiveTypeAdapterFactory.java:101)
at com.google.gson.Gson.getAdapter(Gson.java:501)
at com.google.gson.internal.bind.ReflectiveTypeAdapterFactory.createBoundField(ReflectiveTypeAdapterFactory.java:116)
at com.google.gson.internal.bind.ReflectiveTypeAdapterFactory.getBoundFields(ReflectiveTypeAdapterFactory.java:165)
at com.google.gson.internal.bind.ReflectiveTypeAdapterFactory.create(ReflectiveTypeAdapterFactory.java:101)
at com.google.gson.Gson.getAdapter(Gson.java:501)
at com.google.gson.internal.bind.CollectionTypeAdapterFactory.create(CollectionTypeAdapterFactory.java:53)
at com.google.gson.Gson.getAdapter(Gson.java:501)
at com.google.gson.internal.bind.ReflectiveTypeAdapterFactory.createBoundField(ReflectiveTypeAdapterFactory.java:116)
at com.google.gson.internal.bind.ReflectiveTypeAdapterFactory.getBoundFields(ReflectiveTypeAdapterFactory.java:165)
at com.google.gson.internal.bind.ReflectiveTypeAdapterFactory.create(ReflectiveTypeAdapterFactory.java:101)
at com.google.gson.Gson.getAdapter(Gson.java:501)
at com.google.gson.Gson.fromJson(Gson.java:990)
at com.google.gson.Gson.fromJson(Gson.java:956)
at com.google.gson.Gson.fromJson(Gson.java:905)
at com.google.gson.Gson.fromJson(Gson.java:876)
at xyz.erupt.core.controller.EruptModifyController.addEruptData(EruptModifyController.java:76)
at xyz.erupt.core.controller.EruptModifyController$$FastClassBySpringCGLIB$$b1819928.invoke()
at org.springframework.cglib.proxy.MethodProxy.invoke(MethodProxy.java:218)
at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.invokeJoinpoint(CglibAopProxy.java:793)
at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:163)
at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.proceed(CglibAopProxy.java:763)
at org.springframework.transaction.interceptor.TransactionInterceptor$1.proceedWithInvocation(TransactionInterceptor.java:123)
at org.springframework.transaction.interceptor.TransactionAspectSupport.invokeWithinTransaction(TransactionAspectSupport.java:388)
at org.springframework.transaction.interceptor.TransactionInterceptor.invoke(TransactionInterceptor.java:119)
at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:186)
at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.proceed(CglibAopProxy.java:763)
at org.springframework.aop.framework.CglibAopProxy$DynamicAdvisedInterceptor.intercept(CglibAopProxy.java:708)
at xyz.erupt.core.controller.EruptModifyController$$EnhancerBySpringCGLIB$$2c4a02a1.addEruptData()
at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77)
at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.base/java.lang.reflect.Method.invoke(Method.java:568)
at org.springframework.web.method.support.InvocableHandlerMethod.doInvoke(InvocableHandlerMethod.java:205)
at org.springframework.web.method.support.InvocableHandlerMethod.invokeForRequest(InvocableHandlerMethod.java:150)
at org.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod.invokeAndHandle(ServletInvocableHandlerMethod.java:117)
at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.invokeHandlerMethod(RequestMappingHandlerAdapter.java:895)
at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.handleInternal(RequestMappingHandlerAdapter.java:808)
at org.springframework.web.servlet.mvc.method.AbstractHandlerMethodAdapter.handle(AbstractHandlerMethodAdapter.java:87)
at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:1067)
at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:963)
at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:1006)
at org.springframework.web.servlet.FrameworkServlet.doPost(FrameworkServlet.java:909)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:517)
at org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:883)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:584)
at io.undertow.servlet.handlers.ServletHandler.handleRequest(ServletHandler.java:74)
at io.undertow.servlet.handlers.FilterHandler$FilterChainImpl.doFilter(FilterHandler.java:129)
at xyz.erupt.security.interceptor.HttpServletRequestFilter.doFilter(HttpServletRequestFilter.java:47)
at io.undertow.servlet.core.ManagedFilter.doFilter(ManagedFilter.java:61)
at io.undertow.servlet.handlers.FilterHandler$FilterChainImpl.doFilter(FilterHandler.java:131)
at org.springframework.web.filter.RequestContextFilter.doFilterInternal(RequestContextFilter.java:100)
at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:117)
at io.undertow.servlet.core.ManagedFilter.doFilter(ManagedFilter.java:61)
at io.undertow.servlet.handlers.FilterHandler$FilterChainImpl.doFilter(FilterHandler.java:131)
at org.springframework.web.filter.FormContentFilter.doFilterInternal(FormContentFilter.java:93)
at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:117)
at io.undertow.servlet.core.ManagedFilter.doFilter(ManagedFilter.java:61)
at io.undertow.servlet.handlers.FilterHandler$FilterChainImpl.doFilter(FilterHandler.java:131)
at org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:201)
at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:117)
at io.undertow.servlet.core.ManagedFilter.doFilter(ManagedFilter.java:61)
at io.undertow.servlet.handlers.FilterHandler$FilterChainImpl.doFilter(FilterHandler.java:131)
at io.undertow.servlet.handlers.FilterHandler.handleRequest(FilterHandler.java:84)
at io.undertow.servlet.handlers.security.ServletSecurityRoleHandler.handleRequest(ServletSecurityRoleHandler.java:62)
at io.undertow.servlet.handlers.ServletChain$1.handleRequest(ServletChain.java:68)
at io.undertow.servlet.handlers.ServletDispatchingHandler.handleRequest(ServletDispatchingHandler.java:36)
at io.undertow.servlet.handlers.RedirectDirHandler.handleRequest(RedirectDirHandler.java:68)
at io.undertow.servlet.handlers.security.SSLInformationAssociationHandler.handleRequest(SSLInformationAssociationHandler.java:117)
at io.undertow.servlet.handlers.security.ServletAuthenticationCallHandler.handleRequest(ServletAuthenticationCallHandler.java:57)
at io.undertow.server.handlers.PredicateHandler.handleRequest(PredicateHandler.java:43)
at io.undertow.security.handlers.AbstractConfidentialityHandler.handleRequest(AbstractConfidentialityHandler.java:46)
at io.undertow.servlet.handlers.security.ServletConfidentialityConstraintHandler.handleRequest(ServletConfidentialityConstraintHandler.java:64)
at io.undertow.security.handlers.AuthenticationMechanismsHandler.handleRequest(AuthenticationMechanismsHandler.java:60)
at io.undertow.servlet.handlers.security.CachedAuthenticatedSessionHandler.handleRequest(CachedAuthenticatedSessionHandler.java:77)
at io.undertow.security.handlers.AbstractSecurityContextAssociationHandler.handleRequest(AbstractSecurityContextAssociationHandler.java:43)
at io.undertow.server.handlers.PredicateHandler.handleRequest(PredicateHandler.java:43)
at io.undertow.servlet.handlers.SendErrorPageHandler.handleRequest(SendErrorPageHandler.java:52)
at io.undertow.server.handlers.PredicateHandler.handleRequest(PredicateHandler.java:43)
at io.undertow.servlet.handlers.ServletInitialHandler.handleFirstRequest(ServletInitialHandler.java:275)
at io.undertow.servlet.handlers.ServletInitialHandler.access$100(ServletInitialHandler.java:79)
at io.undertow.servlet.handlers.ServletInitialHandler$2.call(ServletInitialHandler.java:134)
at io.undertow.servlet.handlers.ServletInitialHandler$2.call(ServletInitialHandler.java:131)
at io.undertow.servlet.core.ServletRequestContextThreadSetupAction$1.call(ServletRequestContextThreadSetupAction.java:48)
at io.undertow.servlet.core.ContextClassLoaderSetupAction$1.call(ContextClassLoaderSetupAction.java:43)
at io.undertow.servlet.handlers.ServletInitialHandler.dispatchRequest(ServletInitialHandler.java:255)
at io.undertow.servlet.handlers.ServletInitialHandler.access$000(ServletInitialHandler.java:79)
at io.undertow.servlet.handlers.ServletInitialHandler$1.handleRequest(ServletInitialHandler.java:100)
at io.undertow.server.Connectors.executeRootHandler(Connectors.java:387)
at io.undertow.server.HttpServerExchange$1.run(HttpServerExchange.java:852)
at org.jboss.threads.ContextClassLoaderSavingRunnable.run(ContextClassLoaderSavingRunnable.java:35)
at org.jboss.threads.EnhancedQueueExecutor.safeRun(EnhancedQueueExecutor.java:2019)
at org.jboss.threads.EnhancedQueueExecutor$ThreadBody.doRunTask(EnhancedQueueExecutor.java:1558)
at org.jboss.threads.EnhancedQueueExecutor$ThreadBody.run(EnhancedQueueExecutor.java:1449)
at org.xnio.XnioWorker$WorkerThreadFactory$1$1.run(XnioWorker.java:1282)
at java.base/java.lang.Thread.run(Thread.java:833)
Caused by: java.lang.reflect.InaccessibleObjectException: Unable to make field private final int java.lang.ThreadLocal.threadLocalHashCode accessible: module java.base does not "opens java.lang" to unnamed module @4fcd19b3
at java.base/java.lang.reflect.AccessibleObject.checkCanSetAccessible(AccessibleObject.java:354)
at java.base/java.lang.reflect.AccessibleObject.checkCanSetAccessible(AccessibleObject.java:297)
at java.base/java.lang.reflect.Field.checkCanSetAccessible(Field.java:178)
at java.base/java.lang.reflect.Field.setAccessible(Field.java:172)
at com.google.gson.internal.reflect.ReflectionHelper.makeAccessible(ReflectionHelper.java:19)
... 109 more
JDK版本: openjdk_8_302
erupt版本: 1.8.5 (请确保最新尝试是否还有问题)
ManyToOne匹配不到数据时,ID会给个0。同时点击查看或编辑按钮,会出NullPointException。
@ManyToOne
@JoinColumn(name="task_id")
@EruptField(
views = {@View(title = "拜访照片", column = "img", type = ViewType.IMAGE, show = false ),
@View(title = "拜访照片val", column = "img", show = false ),
@View(title = "拜访ID", column = "id", show = false )
}
)
private VisitTask visitTask;
堆栈信息
java.lang.NullPointerException: null
at sun.reflect.UnsafeFieldAccessorImpl.ensureObj(UnsafeFieldAccessorImpl.java:57) ~[na:1.8.0_302]
at sun.reflect.UnsafeObjectFieldAccessorImpl.get(UnsafeObjectFieldAccessorImpl.java:36) ~[na:1.8.0_302]
at java.lang.reflect.Field.get(Field.java:393) ~[na:1.8.0_302]
at xyz.erupt.core.util.EruptUtil.generateEruptDataMap(EruptUtil.java:55) ~[erupt-core-1.8.5.jar!/:na]
at xyz.erupt.core.controller.EruptDataController.getEruptDataById(EruptDataController.java:93) ~[erupt-core-1.8.5.jar!/:na]
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[na:1.8.0_302]
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) ~[na:1.8.0_302]
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[na:1.8.0_302]
at java.lang.reflect.Method.invoke(Method.java:498) ~[na:1.8.0_302]
at org.springframework.web.method.support.InvocableHandlerMethod.doInvoke(InvocableHandlerMethod.java:197) ~[spring-web-5.3.9.jar!/:5.3.9]
at org.springframework.web.method.support.InvocableHandlerMethod.invokeForRequest(InvocableHandlerMethod.java:141) ~[spring-web-5.3.9.jar!/:5.3.9]
at org.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod.invokeAndHandle(ServletInvocableHandlerMethod.java:106) ~[spring-webmvc-5.3.9.jar!/:5.3.9]
at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.invokeHandlerMethod(RequestMappingHandlerAdapter.java:895) ~[spring-webmvc-5.3.9.jar!/:5.3.9]
at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.handleInternal(RequestMappingHandlerAdapter.java:808) ~[spring-webmvc-5.3.9.jar!/:5.3.9]
at org.springframework.web.servlet.mvc.method.AbstractHandlerMethodAdapter.handle(AbstractHandlerMethodAdapter.java:87) ~[spring-webmvc-5.3.9.jar!/:5.3.9]
at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:1064) ~[spring-webmvc-5.3.9.jar!/:5.3.9]
at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:963) ~[spring-webmvc-5.3.9.jar!/:5.3.9]
at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:1006) ~[spring-webmvc-5.3.9.jar!/:5.3.9]
at org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:898) ~[spring-webmvc-5.3.9.jar!/:5.3.9]
at javax.servlet.http.HttpServlet.service(HttpServlet.java:655) ~[tomcat-embed-core-9.0.52.jar!/:na]
at org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:883) ~[spring-webmvc-5.3.9.jar!/:5.3.9]
at javax.servlet.http.HttpServlet.service(HttpServlet.java:764) ~[tomcat-embed-core-9.0.52.jar!/:na]
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:227) ~[tomcat-embed-core-9.0.52.jar!/:na]
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162) ~[tomcat-embed-core-9.0.52.jar!/:na]
at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:53) ~[tomcat-embed-websocket-9.0.52.jar!/:na]
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:189) ~[tomcat-embed-core-9.0.52.jar!/:na]
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162) ~[tomcat-embed-core-9.0.52.jar!/:na]
at xyz.erupt.security.interceptor.HttpServletRequestFilter.doFilter(HttpServletRequestFilter.java:48) ~[erupt-security-1.8.5.jar!/:na]
测试涉及到的文件(注意脱密)
JDK版本: jdk-15.0.2 windows11
erupt版本: 1.10.6 (请确保最新尝试是否还有问题)
UI上操作发送电子邮件,发生如下错误
复现代码
堆栈信息
WARNING: An illegal reflective access operation has occurred WARNING: Illegal reflective access by com.google.gson.internal.reflect.UnsafeReflectionAccessor (file:/C:/Users/%e9%bb%84%e5%a5%95%e9%b9%8f/.m2/repository/com/google/code/gson/gson/2.8.9/gson-2.8.9.jar) to field java.io.PrintStream.autoFlush WARNING: Please consider reporting this to the maintainers of com.google.gson.internal.reflect.UnsafeReflectionAccessor WARNING: Use --illegal-access=warn to enable warnings of further illegal reflective access operations WARNING: All illegal access operations will be denied in a future release java.lang.reflect.InaccessibleObjectException: Unable to make private java.lang.module.Configuration() accessible: module java.base does not "opens java.lang.module" to unnamed module @45292ec1 at java.base/java.lang.reflect.AccessibleObject.checkCanSetAccessible(AccessibleObject.java:361) at java.base/java.lang.reflect.AccessibleObject.checkCanSetAccessible(AccessibleObject.java:301) at java.base/java.lang.reflect.Constructor.checkCanSetAccessible(Constructor.java:189) at java.base/java.lang.reflect.Constructor.setAccessible(Constructor.java:182) at com.google.gson.internal.reflect.UnsafeReflectionAccessor.makeAccessible(UnsafeReflectionAccessor.java:44) at com.google.gson.internal.ConstructorConstructor.newDefaultConstructor(ConstructorConstructor.java:103) at com.google.gson.internal.ConstructorConstructor.get(ConstructorConstructor.java:85) at com.google.gson.internal.bind.ReflectiveTypeAdapterFactory.create(ReflectiveTypeAdapterFactory.java:101) at com.google.gson.Gson.getAdapter(Gson.java:489) at com.google.gson.internal.bind.ReflectiveTypeAdapterFactory.createBoundField(ReflectiveTypeAdapterFactory.java:117) at com.google.gson.internal.bind.ReflectiveTypeAdapterFactory.getBoundFields(ReflectiveTypeAdapterFactory.java:166) at com.google.gson.internal.bind.ReflectiveTypeAdapterFactory.create(ReflectiveTypeAdapterFactory.java:102) at com.google.gson.Gson.getAdapter(Gson.java:489)
数据量小的情况下sqlite就够用了,不需要再去额外部署一个数据库, 部署起来比较方便一点.
JDK版本: openjdk_8_201
erupt版本: 1.5.7
excel 导出最多只能导出500条数据
Linux系统版本
LSB Version: core-11.1.0ubuntu2-noarch:security-11.1.0ubuntu2-noarch
Distributor ID: Ubuntu
Description: Ubuntu 20.04.5 LTS
Release: 20.04
Codename: focal
JDK版本
openjdk version "17.0.4" 2022-07-19
OpenJDK Runtime Environment GraalVM CE 22.2.0 (build 17.0.4+8-jvmci-22.2-b06)
OpenJDK 64-Bit Server VM GraalVM CE 22.2.0 (build 17.0.4+8-jvmci-22.2-b06, mixed mode, sharing)
erupt版本
:: Spring Boot :: v(2.7.2)
:: Erupt Framework :: v(1.10.13)
堆栈信息
2022-09-07 12:26:06.609 INFO 35678 --- [ main] com.bacterial.strain.cms.CmsApplication : Starting CmsApplication v1.0.0 using Java 17.0.4 on iZ2ze436qim4c2f4o4vsl9Z with PID 35678 (/var/www/strain/cms-1.0.0.jar started by root in /var/www/strain)
2022-09-07 12:26:06.612 INFO 35678 --- [ main] com.bacterial.strain.cms.CmsApplication : The following 1 profile is active: "dev"
2022-09-07 12:26:09.953 INFO 35678 --- [ main] .s.d.r.c.RepositoryConfigurationDelegate : Multiple Spring Data modules found, entering strict repository configuration mode
2022-09-07 12:26:09.967 INFO 35678 --- [ main] .s.d.r.c.RepositoryConfigurationDelegate : Bootstrapping Spring Data JPA repositories in DEFAULT mode.
2022-09-07 12:26:09.995 INFO 35678 --- [ main] .s.d.r.c.RepositoryConfigurationDelegate : Finished Spring Data repository scanning in 8 ms. Found 0 JPA repository interfaces.
2022-09-07 12:26:10.074 INFO 35678 --- [ main] .s.d.r.c.RepositoryConfigurationDelegate : Multiple Spring Data modules found, entering strict repository configuration mode
2022-09-07 12:26:10.079 INFO 35678 --- [ main] .s.d.r.c.RepositoryConfigurationDelegate : Bootstrapping Spring Data Redis repositories in DEFAULT mode.
2022-09-07 12:26:10.124 INFO 35678 --- [ main] .s.d.r.c.RepositoryConfigurationDelegate : Finished Spring Data repository scanning in 1 ms. Found 0 Redis repository interfaces.
2022-09-07 12:26:12.656 INFO 35678 --- [ main] o.s.b.w.embedded.tomcat.TomcatWebServer : Tomcat initialized with port(s): 8080 (http)
2022-09-07 12:26:12.682 INFO 35678 --- [ main] o.apache.catalina.core.StandardService : Starting service [Tomcat]
2022-09-07 12:26:12.683 INFO 35678 --- [ main] org.apache.catalina.core.StandardEngine : Starting Servlet engine: [Apache Tomcat/9.0.65]
2022-09-07 12:26:12.932 INFO 35678 --- [ main] o.a.c.c.C.[Tomcat].[localhost].[/] : Initializing Spring embedded WebApplicationContext
2022-09-07 12:26:12.933 INFO 35678 --- [ main] w.s.c.ServletWebServerApplicationContext : Root WebApplicationContext: initialization completed in 6095 ms
2022-09-07 12:26:14.392 INFO 35678 --- [ main] com.zaxxer.hikari.HikariDataSource : HikariPool-1 - Starting...
2022-09-07 12:26:15.727 INFO 35678 --- [ main] com.zaxxer.hikari.HikariDataSource : HikariPool-1 - Start completed.
2022-09-07 12:26:16.136 INFO 35678 --- [ main] o.hibernate.jpa.internal.util.LogHelper : HHH000204: Processing PersistenceUnitInfo [name: default]
2022-09-07 12:26:16.770 INFO 35678 --- [ main] org.hibernate.Version : HHH000412: Hibernate ORM core version 5.6.10.Final
2022-09-07 12:26:17.592 INFO 35678 --- [ main] o.hibernate.annotations.common.Version : HCANN000001: Hibernate Commons Annotations {5.1.2.Final}
2022-09-07 12:26:18.026 INFO 35678 --- [ main] org.hibernate.dialect.Dialect : HHH000400: Using dialect: org.hibernate.dialect.MySQL5InnoDBDialect
2022-09-07 12:26:21.746 INFO 35678 --- [ main] o.h.e.t.j.p.i.JtaPlatformInitiator : HHH000490: Using JtaPlatform implementation: [org.hibernate.engine.transaction.jta.platform.internal.NoJtaPlatform]
2022-09-07 12:26:21.780 INFO 35678 --- [ main] j.LocalContainerEntityManagerFactoryBean : Initialized JPA EntityManagerFactory for persistence unit 'default'
2022-09-07 12:26:23.479 WARN 35678 --- [ main] JpaBaseConfiguration$JpaWebConfiguration : spring.jpa.open-in-view is enabled by default. Therefore, database queries may be performed during view rendering. Explicitly configure spring.jpa.open-in-view to disable this warning
2022-09-07 12:26:24.132 INFO 35678 --- [ main] o.s.b.a.w.s.WelcomePageHandlerMapping : Adding welcome page: class path resource [public/index.html]
2022-09-07 12:26:25.334 INFO 35678 --- [ main] o.s.b.w.embedded.tomcat.TomcatWebServer : Tomcat started on port(s): 8080 (http) with context path ''
2022-09-07 12:26:25.385 INFO 35678 --- [ main] com.bacterial.strain.cms.CmsApplication : Started CmsApplication in 20.89 seconds (JVM running for 25.34)
2022-09-07 12:26:25.674 INFO 35678 --- [ main] xyz.erupt.core.service.EruptCoreService : <============================================================>
2022-09-07 12:26:25.681 INFO 35678 --- [ main] xyz.erupt.core.service.EruptCoreService : 🚀 -> erupt-jpa module initialization completed in 288ms
2022-09-07 12:26:25.686 INFO 35678 --- [ main] xyz.erupt.core.service.EruptCoreService : 🚀 -> erupt-security module initialization completed in 5ms
2022-09-07 12:26:25.688 INFO 35678 --- [ main] xyz.erupt.core.service.EruptCoreService : 🚀 -> erupt-upms module initialization completed in 2ms
2022-09-07 12:26:25.690 INFO 35678 --- [ main] xyz.erupt.core.service.EruptCoreService : Erupt modules : 3
2022-09-07 12:26:25.690 INFO 35678 --- [ main] xyz.erupt.core.service.EruptCoreService : Erupt classes : 15
2022-09-07 12:26:25.690 INFO 35678 --- [ main] xyz.erupt.core.service.EruptCoreService : Erupt Framework initialization completed in 297ms
2022-09-07 12:26:25.691 INFO 35678 --- [ main] xyz.erupt.core.service.EruptCoreService : <============================================================>
Exception in thread "main" java.lang.reflect.InvocationTargetException
at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77)
at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.base/java.lang.reflect.Method.invoke(Method.java:568)
at org.springframework.boot.loader.MainMethodRunner.run(MainMethodRunner.java:49)
at org.springframework.boot.loader.Launcher.launch(Launcher.java:108)
at org.springframework.boot.loader.Launcher.launch(Launcher.java:58)
at org.springframework.boot.loader.JarLauncher.main(JarLauncher.java:65)
Caused by: java.awt.AWTError: Can't connect to X11 window server using ':0.0' as the value of the DISPLAY variable.
at java.desktop/sun.awt.X11GraphicsEnvironment.initDisplay(Native Method)
at java.desktop/sun.awt.X11GraphicsEnvironment$1.run(X11GraphicsEnvironment.java:101)
at java.base/java.security.AccessController.doPrivileged(AccessController.java:318)
at java.desktop/sun.awt.X11GraphicsEnvironment.<clinit>(X11GraphicsEnvironment.java:60)
at java.desktop/sun.awt.PlatformGraphicsInfo.createGE(PlatformGraphicsInfo.java:36)
at java.desktop/java.awt.GraphicsEnvironment$LocalGE.createGE(GraphicsEnvironment.java:93)
at java.desktop/java.awt.GraphicsEnvironment$LocalGE.<clinit>(GraphicsEnvironment.java:84)
at java.desktop/java.awt.GraphicsEnvironment.getLocalGraphicsEnvironment(GraphicsEnvironment.java:106)
at java.desktop/sun.awt.X11.XToolkit.<clinit>(XToolkit.java:224)
at java.desktop/sun.awt.PlatformGraphicsInfo.createToolkit(PlatformGraphicsInfo.java:40)
at java.desktop/java.awt.Toolkit.getDefaultToolkit(Toolkit.java:599)
at java.desktop/java.awt.Desktop.isDesktopSupported(Desktop.java:329)
at java.desktop/java.awt.Desktop.getDesktop(Desktop.java:303)
at com.bacterial.strain.cms.CmsApplication.main(CmsApplication.java:23)
... 8 more
JDK版本:11.0.9.1
erupt版本:1.6.4
开启夜间模式,路由复用被强制关闭
在夜间模式下开启路由复用,夜间模式失效(互相冲突)
夜间模式下首页一片漆黑,无法显示内容,移动端显示正常(若能提供夜间模式下自定义页面 取消反转色选项 更佳)
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta content="width=device-width, initial-scale=1" name="viewport">
</head>
<body>
<h1>Hello World</h1>
</body>
</html>
home.html
JDK版本: openjdk_8_201
erupt版本: 1.10.1
当创建的菜单的类型值(如:都为type)为重复的时候(我只试了菜单类型为table类型),先创建一个菜单名称为A,再创建另一个菜单名称为B
先点击菜单B可会正常跳转,再点击A则依然保持在B的页面,
然后点击别的类型值不同的菜单,再点击菜单A,则依然是跳转到菜单B
应该是前端使用类型值绑定了吧?
且在程序中获取当前菜单eruptContextService.getCurrentEruptMenu()
时,也只能一直获取菜单B,应该是源码中如下部分导致:使用请求头中的erupt字段存储的类型值获取的时候,类型值相同时,始终为数据库中最后新增的菜单,因为map会覆盖的嘛~
// xyz.erupt.upms.service.EruptUserService#cacheUserInfo
public void cacheUserInfo(EruptUser eruptUser, String token) {
List<EruptMenu> eruptMenus = this.eruptMenuService.getUserAllMenu(eruptUser);
Map<String, Object> valueMap = new HashMap();
Map<String, Object> codeMap = new HashMap();
Iterator var6 = eruptMenus.iterator();
while(var6.hasNext()) {
EruptMenu menu = (EruptMenu)var6.next();
codeMap.put(menu.getCode(), menu);
if (null != menu.getValue()) {
valueMap.put(menu.getValue(), menu);
}
}
this.sessionService.putMap("eruptAuth:menu-value-map:" + token, valueMap, (long)this.eruptUpmsConfig.getExpireTimeByLogin());
this.sessionService.putMap("eruptAuth:menu-code-map:" + token, codeMap, (long)this.eruptUpmsConfig.getExpireTimeByLogin());
this.sessionService.put("eruptAuth:menu-view:" + token, this.gson.toJson(this.eruptMenuService.geneMenuListVo(eruptMenus)), (long)this.eruptUpmsConfig.getExpireTimeByLogin());
}
本来是在1.8.3想使用xyz.erupt.annotation.fun.DataProxy#beforeFetch
方法获取不同上级菜单(或者根据菜单的自定义参数)获取不同的数据,结果发现获取的菜单(^_^)是相同的,本来以为新版本解决了,看来还是没有的呀
JDK版本: openjdk_8_201
erupt版本: 1.11.1 (请确保最新尝试是否还有问题)
UEditor 上传图片405
堆栈信息
测试涉及到的文件(注意脱密)
JDK版本: openjdk_17
erupt版本: 1.10.13
当类型为富文本编辑器时,生成的带有@lob注解的字段,在Postgre下,编辑生成的字段值时会报错
JDK版本: openjdk_8_201
erupt版本: 1.7.2 (请确保最新尝试是否还有问题)
复现代码
页面中使用window.location.href无法进行跳转,能否获取上层iframe进行跳转
堆栈信息
测试涉及到的文件(注意脱密)
需要尽快升级lib 中的引用,安全风险还是需要解决的。
JDK版本: openjdk 15.0.2
erupt版本: 1.6.7
添加菜单类型为树,当树节点中有html属性的时候Ueditor和CKeditor都无法显示内容,textarea正常。
@Entity
@Table(name = "demo_tree")
@Erupt(
name = "树示例",
orderBy = "TreeView.sort",
tree = @Tree(id = "id", label = "name", pid = "parent.id"))
public class TreeView extends BaseModel {
@EruptField(views = @View(title = "名称"), edit = @Edit(title = "名称", notNull = true))
private String name;
@EruptField(views = @View(title = "显示顺序"), edit = @Edit(title = "显示顺序"))
private Integer sort;
@Lob
@EruptField(
views = @View(title = "内容", type = ViewType.HTML, export = false),
edit =
@Edit(title = "内容", type = EditType.HTML_EDITOR, htmlEditorType = @HtmlEditorType(HtmlEditorType.Type.CKEDITOR)))
private String content;
@ManyToOne
@EruptField(
edit =
@Edit(
title = "上级树节点",
type = EditType.REFERENCE_TREE,
referenceTreeType = @ReferenceTreeType(pid = "parent.id")))
private TreeView parent;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
@Override
public String toString() {
return "TreeView{" +
"name='" + name + '\'' +
", parent=" + parent +
'}';
}
public Integer getSort() {
return sort;
}
public void setSort(Integer sort) {
this.sort = sort;
}
public String getContent() {
return content;
}
public void setContent(String content) {
this.content = content;
}
public TreeView getParent() {
return parent;
}
public void setParent(TreeView parent) {
this.parent = parent;
}
}
堆栈信息
测试涉及到的文件(注意脱密)
同题
JDK版本: Oracle JDK1.8.0_162
erupt版本: 1.10.6 (仍有问题)
@Erupt(name="采集器任务")
@Entity(name = "user_rules")
@DynamicUpdate
@DynamicInsert
@Getter
@Setter
public class Test{
@EruptField(
views = @View(title = "采集量", sortable = true,type = ViewType.AUTO),
edit = @Edit(title = "采集量", readonly = @Readonly,search=@Search(vague = true),numberType = @NumberType(min=0))
)
@Column(name = "update_count")
private Integer updateCount;
}
JDK版本: openjdk_8_201
erupt版本: 1.10.7 (请确保最新尝试是否还有问题)
首先说明一下,作者整个框架的设计思路很厉害,代码写的也比我好多了,有点遗憾的是,核心源码没有注释,这对于想要贡献代码的人来说,是个门槛。
咨询:前端可以实现多页面吗?即可以同时打开几个页面,可切换,切换时保留切换前的状态
如果要实现sku只能用自定义页面吗?
A declarative, efficient, and flexible JavaScript library for building user interfaces.
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google ❤️ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.