在本文中,我们将为您详细介绍Dwr3.0纯注解(纯JavaCode配置)配置与应用浅析一之零配置文件化的相关知识,并且为您解答关于dw写java的疑问,此外,我们还会提供一些关于Erupt1.10.9
在本文中,我们将为您详细介绍Dwr3.0 纯注解 (纯 Java Code 配置) 配置与应用浅析一之零配置文件化的相关知识,并且为您解答关于dw写java的疑问,此外,我们还会提供一些关于 Erupt 1.10.9 发布,纯注解、低代码,高效开发全领域后台,增加云原生分布式开发支持、 Erupt 1.8.1 发布,纯注解,零前端代码,低代码开发 ADMIN,不生成任何代码、 Erupt 1.8.2 发布,矩阵式配置中心,纯注解,零前端代码,低代码开发 ADMIN、Atitit.dwr3 不能显示错误详细信息的解决方案,控件显示错误详细信息的解决方案 java .net php的有用信息。
本文目录一览:- Dwr3.0 纯注解 (纯 Java Code 配置) 配置与应用浅析一之零配置文件化(dw写java)
- Erupt 1.10.9 发布,纯注解、低代码,高效开发全领域后台,增加云原生分布式开发支持
- Erupt 1.8.1 发布,纯注解,零前端代码,低代码开发 ADMIN,不生成任何代码
- Erupt 1.8.2 发布,矩阵式配置中心,纯注解,零前端代码,低代码开发 ADMIN
- Atitit.dwr3 不能显示错误详细信息的解决方案,控件显示错误详细信息的解决方案 java .net php
Dwr3.0 纯注解 (纯 Java Code 配置) 配置与应用浅析一之零配置文件化(dw写java)
//Annotation configuration dwr servlet
private void initializeDwrServlet(ServletContext container) {
DwrServlet dwrServlet = new DwrServlet();
ServletRegistration.Dynamic dynamic = container.addServlet("dwr-invoker", dwrServlet );
dynamic.setLoadOnStartup(2);
dynamic.setInitParameter("debug", "true");
dynamic.setInitParameter("pollAndCometEnabled", "true");
dynamic.setInitParameter("activeReverseAjaxEnabled", "true");
dynamic.setInitParameter("maxWaitAfterWrite", "1800000");
dynamic.setInitParameter("disconnectedTime", "60000");
dynamic.setInitParameter("classes", dwrAnnotationClasssConfiguration());
dynamic.addMapping("/dwr/*");
}
// Configure Dwr Annotation Classes,comma separated
private String dwrAnnotationClasssConfiguration() {
StringBuffer config = new StringBuffer();
config.append("com.g360.bean.reconsole.opcost.AnnualOpCostRequestController");
config.append(",");
config.append("com.g360.bean.security.SessionExpiredParam");
return config.toString();
}
上面我的配置是基于注解版的 Dwr Servlet 配置 (将 web.xml 里面的 servlet 配置转换为了纯 Java 代码配置),当然也包括前端和后端直接交互的类 (
com.g360.bean.reconsole.opcost.AnnualOpCostRequestController,com.g360.bean.security.SessionExpiredParam
) 也是使用注解配置的 (Dwr 注解配置,包括 @RemoteProxy,@RemoteMethod),这对于有些注解配置基础的同学来说可能比较容易看懂,对于初次接触的有什么不懂的可以给我留言哦;
com.g360.bean.security.SessionExpiredParam 的注解配置如下所示:
@Component("sessionExpiredParam")
@RemoteProxy(creator = SpringCreator.class, scope = ScriptScope.APPLICATION, name = "remote", creatorParams = @Param(name = "beanName", value = "sessionExpiredParam"))
public class SessionExpiredParam
{
private static final Logger LOGGER = LoggerFactory.getLogger(SessionExpiredParam.class);
public boolean isSessionExpire (String sessionId)
{
return null == ConstantCacheService.getCacheConstant(sessionId);
}
@RemoteMethod
public void setEnableDwrUpdate(String sessionId)
{
ScriptSession scriptSession = WebContextFactory.get().getScriptSession();
String jsessionId = scriptSession.getHttpSessionId();
String dwrSessionId = scriptSession.getId();
LOGGER.info(String.format("set jsessionId = [%s],dwrsession = [%s] push enabled",jsessionId,dwrSessionId));
ConstantCacheService.putCacheConstant(Constants.PUSH_ID+jsessionId, dwrSessionId);
}
}
这就是相当于 dwr.xml 配置文件中如下所示:
<!DOCTYPE dwr PUBLIC
"-//GetAhead Limited//DTD Direct Web Remoting 3.0//EN"
"http://getahead.org/dwr/dwr30.dtd">
<dwr>
<allow>
<create creator="new" javascript="remote" scope="application">
<param name="class" value="com.g360.bean.security.SessionExpiredParam"/>
</create>
</allow>
</dwr>
对于 com.g360.bean.reconsole.opcost.AnnualOpCostRequestController 来说道理一样,这里就不多做说明了;
对于使用 DwrServlet 来说要使用纯注解配置 (不使用 dwr.xml) 一定要注意在初始化参数时一定要配置 classes 这个参数,而且这个参数是这个注解类的全路径名,有多个的话就使用逗号分隔,这个是特别重要的哦,因为 Dwr3.0 好像还不支持包扫描,不知道是需要什么配置才能实现还是怎么的,如果有哪位仁兄正好看见,也正好知道的话请留言麻烦告诉一下,感激不尽啊!欢迎大家有什么不明白的地方或者有什么不对的地方,请随时留言;
Erupt 1.10.9 发布,纯注解、低代码,高效开发全领域后台,增加云原生分布式开发支持
Erupt 通用后台管理框架
Erupt 是一个低代码 全栈类 框架,它使用 Java 注解 动态构建页面,及增、删、改、查、权限控制等功能。
零前端代码、零 CURD、自动建表,仅需 一个类文件 + 简洁的注解配置,快速开发企业级 Admin 管理后台。
提供企业级中后台管理系统的全栈解决方案,大幅压缩研发周期,专注核心业务
本次更新内容
解决自定义弹出层页面不能正确展示的问题
解决因为版本更新缓存内容不能正确更新的BUG
解决自定义页面在某些场景下展示不正确的BUG
修复cloud能力下drill 404的bug
TPL模板支持动态传参,可让模板动态复用,如:erupt.html?param=123
移除cloud能力下网络代理host配置,防止网关检测导致请求被拒绝
优化cloud注册信息的展示
增加erupt、entityManager、tpl 动态注册移除方法
增加 MetaModelCreateVo 工具类,只展示创建人与创建时间
@Erupt → desc 配置会在前端导航位置给予展示
修复window系统下本地图片下载失败的bug
菜单值更新后会重新构建权限 #93
增加redis-session自动续期配置 #18
角色管理下可查看角色下用户
EruptRole 表增加排序字段 sort
优化tab_add组件,修改和新增行为可触发dataProxy
增加时间区间组件快捷选择功能,支持近7天、近30天、本周、上周、本月、上月选择
Attachment组件支持文件类配置会后绑定UI,仅能选择已配置文件类型
excel导入配置限定文件类型为xls和xlsx
开源 erupt-tpl-ui.element-plus
BI报表支持下钻功能
开源 erupt-cloud 分布式开发erupt node节点,构建通用云配置中心
项目官网:www.erupt.xyz
@Erupt(
name = "简单的例子",
power = @Power(importable = true, export = true)
)
@Table(name = "t_simple") //数据库表名
@Entity
public class Simple extends BaseModel {
@EruptField(
views = @View(title = "文本"),
edit = @Edit(title = "文本", notNull = true, search = @Search)
)
private String input;
@EruptField(
views = @View(title = "数值", sortable = true),
edit = @Edit(title = "数值", search = @Search)
)
private Float number;
@EruptField(
views = @View(title = "布尔"),
edit = @Edit(title = "布尔", search = @Search)
)
private Boolean bool;
@EruptField(
views = @View(title = "时间"),
edit = @Edit(title = "时间", search = @Search(vague = true))
)
private Date date;
@EruptField(
views = @View(title = "滑动条"),
edit = @Edit(title = "滑动条", type = EditType.SLIDER, search = @Search,
sliderType = @SliderType(max = 90, markPoints = {0, 30, 60, 90}, dots = true))
)
private Integer slide;
@EruptField(
views = @View(title = "下拉选择"),
edit = @Edit(
search = @Search,
title = "下拉选择", type = EditType.CHOICE,
choiceType = @ChoiceType(fetchHandler = SqlChoiceFetchHandler.class,
fetchHandlerParams = "select id,name from e_upms_menu"
)
)
)
private Long choice;
}
特性 | Features
-
自动建表:表结构自动生成,无需手动建表
-
易于上手:会简单的 Spring Boot 基础知识即可
-
使用简单:仅需了解 @Erupt 与 @EruptField 两个注解即可上手开发
-
代码简洁:仅需一个
.java
文件,template、controller、service、dao 都不需要创建 -
功能强大:动态条件处理,逻辑删除,LDAP,自定义登录逻辑,RedisSession,操作日志等
-
多数据源:支持:MySQL、Oracle、SQL Server、PostgreSQL、H2,甚至支持 MongoDB
-
高扩展性:支持自定义数据源实现、自定义登录逻辑、动态权限管理、生命周期函数、自定义 OSS
-
大量组件:滑动输入、时间选择、一对多、图片上传、代码编辑、自动完成、树、多对多、地图等 23 类组件
-
丰富展示:普通文本、二维码、链接、图片、HTML、代码段、iframe、swf 等
-
低侵入性:几乎所有功能都围绕注解而展开,不影响 Spring Boot 其他功能或三方库库的使用
-
前后端分离:后端与前端可分开部署
-
响应式布局:支持 PC 端手机端等各种规格的设备中使用
-
自定义页面:支持自定义页面,自定义弹出层,且支持:原生 H5 / Freemarker / Thymeleaf 等方式渲染
-
前端零代码:前端布局自动构建,一行前端代码都不用写
-
无需二次开发:仅需引用 jar 包即可 !
完全不需要了解 Angular / React / Vue / Jquery
而且不需要了解 JavaScript / HTML / CSS
甚至不需要了解 Spring MVC / Mybatis / SQL
在线体验 | Demo
演示地址:https://www.erupt.xyz/demo
账号密码:guest / guest
支持主流 4 款现代浏览器,以及 Internet Explorer 11+,可直接运行在 Electron 等基于 Web 标准的环境上
演示截图 | Screenshot ⛰
Erupt 1.8.1 发布,纯注解,零前端代码,低代码开发 ADMIN,不生成任何代码
Erupt 通用后台管理框架
Erupt 是一个低代码 全栈类 框架,它使用 Java 注解 动态生成页面以及增、删、改、查、权限控制等功能。
零前端代码、零 CURD、自动建表,仅需 一个类文件 + 简洁的注解配置,快速开发企业级 Admin 管理后台。
提供企业级中后台管理系统的全栈解决方案,大幅压缩研发周期,专注核心业务
本次更新内容
- 修复DataProxy beforeFetch参数类型不正确的bug
- 升级magic-api版本至1.4.1
- 多对一引用对象支持多级对象访问
项目官网:www.erupt.xyz
@Erupt(
name = "简单的例子",
power = @Power(importable = true, export = true)
)
@Table(name = "t_simple") //数据库表名
@Entity
public class Simple extends BaseModel {
@EruptField(
views = @View(title = "文本"),
edit = @Edit(title = "文本", notNull = true, search = @Search)
)
private String input;
@EruptField(
views = @View(title = "数值", sortable = true),
edit = @Edit(title = "数值", search = @Search)
)
private Float number;
@EruptField(
views = @View(title = "布尔"),
edit = @Edit(title = "布尔", search = @Search)
)
private Boolean bool;
@EruptField(
views = @View(title = "时间"),
edit = @Edit(title = "时间", search = @Search(vague = true))
)
private Date date;
@EruptField(
views = @View(title = "滑动条"),
edit = @Edit(title = "滑动条", type = EditType.SLIDER, search = @Search,
sliderType = @SliderType(max = 90, markPoints = {0, 30, 60, 90}, dots = true))
)
private Integer slide;
@EruptField(
views = @View(title = "下拉选择"),
edit = @Edit(
search = @Search,
title = "下拉选择", type = EditType.CHOICE,
choiceType = @ChoiceType(fetchHandler = SqlChoiceFetchHandler.class,
fetchHandlerParams = "select id,name from e_upms_menu"
)
)
)
private Long choice;
}
特性 | Features
-
自动建表:表结构自动生成,无需手动建表
-
易于上手:会简单的 Spring Boot 基础知识即可
-
使用简单:仅需了解 @Erupt 与 @EruptField 两个注解即可上手开发
-
代码简洁:仅需一个
.java
文件, template、controller、service、dao 都不需要创建 -
功能强大:动态条件处理,逻辑删除,LDAP,自定义登录逻辑,RedisSession,操作日志等
-
多数据源:支持:MySQL、Oracle、SQL Server、PostgreSQL、H2,甚至支持 MongoDB
-
高扩展性:支持自定义数据源实现、自定义登录逻辑、动态权限管理、生命周期函数、自定义 OSS
-
大量组件:滑动输入、时间选择、一对多、图片上传、代码编辑、自动完成、树、多对多、地图等23类组件
-
丰富展示:普通文本、二维码、链接、图片、HTML、代码段、iframe、swf等
-
低侵入性:几乎所有功能都围绕注解而展开,不影响Spring Boot其他功能或三方库库的使用
-
前后端分离:后端与前端可分开部署
-
响应式布局:支持PC端手机端等各种规格的设备中使用
-
自定义页面:支持自定义页面,自定义弹出层,且支持:原生H5 / Freemarker / Thymeleaf等方式渲染
-
前端零代码:前端布局自动构建,一行前端代码都不用写
-
无需二次开发:仅需引用 jar 包即可 !
完全不需要了解 Angular / React / Vue / Jquery
而且不需要了解 JavaScript / HTML / CSS
甚至不需要了解 Spring MVC / Mybatis / SQL
在线体验 | Demo
演示地址:https://www.erupt.xyz/demo
账号密码:guest / guest
支持主流 4 款现代浏览器,以及 Internet Explorer 11+,可直接运行在 Electron 等基于 Web 标准的环境上
演示截图 | Screenshot ⛰
Erupt 1.8.2 发布,矩阵式配置中心,纯注解,零前端代码,低代码开发 ADMIN
Erupt 通用后台管理框架
Erupt 是一个低代码 全栈类 框架,它使用 Java 注解 动态生成页面以及增、删、改、查、权限控制等功能。
零前端代码、零 CURD、自动建表,仅需 一个类文件 + 简洁的注解配置,快速开发企业级 Admin 管理后台。
提供企业级中后台管理系统的全栈解决方案,大幅压缩研发周期,专注核心业务
本次更新内容
- 修复 @RowOperation 自定义按钮展示顺序不固定问题
- 修复 @Drill 下钻按钮展示顺序不固定问题
- 修复多对一 View 视图,展示非文本组件渲染不正确的 BUG
- 自定义按钮表单弹出层支持showBy配置
- 优化地图组件交互逻辑,屏蔽无效地址
- 增加view → width 配置防呆,可不指定像素单位
- 移除 checkbox 组件 search 视图展示
- 增加初始化配置项接口自检功能,如果非成功状态码 2s 后自动刷新
项目官网:www.erupt.xyz
@Erupt(
name = "简单的例子",
power = @Power(importable = true, export = true)
)
@Table(name = "t_simple") //数据库表名
@Entity
public class Simple extends BaseModel {
@EruptField(
views = @View(title = "文本"),
edit = @Edit(title = "文本", notNull = true, search = @Search)
)
private String input;
@EruptField(
views = @View(title = "数值", sortable = true),
edit = @Edit(title = "数值", search = @Search)
)
private Float number;
@EruptField(
views = @View(title = "布尔"),
edit = @Edit(title = "布尔", search = @Search)
)
private Boolean bool;
@EruptField(
views = @View(title = "时间"),
edit = @Edit(title = "时间", search = @Search(vague = true))
)
private Date date;
@EruptField(
views = @View(title = "滑动条"),
edit = @Edit(title = "滑动条", type = EditType.SLIDER, search = @Search,
sliderType = @SliderType(max = 90, markPoints = {0, 30, 60, 90}, dots = true))
)
private Integer slide;
@EruptField(
views = @View(title = "下拉选择"),
edit = @Edit(
search = @Search,
title = "下拉选择", type = EditType.CHOICE,
choiceType = @ChoiceType(fetchHandler = SqlChoiceFetchHandler.class,
fetchHandlerParams = "select id,name from e_upms_menu"
)
)
)
private Long choice;
}
特性 | Features
-
自动建表:表结构自动生成,无需手动建表
-
易于上手:会简单的 Spring Boot 基础知识即可
-
使用简单:仅需了解 @Erupt 与 @EruptField 两个注解即可上手开发
-
代码简洁:仅需一个
.java
文件, template、controller、service、dao 都不需要创建 -
功能强大:动态条件处理,逻辑删除,LDAP,自定义登录逻辑,RedisSession,操作日志等
-
多数据源:支持:MySQL、Oracle、SQL Server、PostgreSQL、H2,甚至支持 MongoDB
-
高扩展性:支持自定义数据源实现、自定义登录逻辑、动态权限管理、生命周期函数、自定义 OSS
-
大量组件:滑动输入、时间选择、一对多、图片上传、代码编辑、自动完成、树、多对多、地图等23类组件
-
丰富展示:普通文本、二维码、链接、图片、HTML、代码段、iframe、swf等
-
低侵入性:几乎所有功能都围绕注解而展开,不影响Spring Boot其他功能或三方库库的使用
-
前后端分离:后端与前端可分开部署
-
响应式布局:支持PC端手机端等各种规格的设备中使用
-
自定义页面:支持自定义页面,自定义弹出层,且支持:原生H5 / Freemarker / Thymeleaf等方式渲染
-
前端零代码:前端布局自动构建,一行前端代码都不用写
-
无需二次开发:仅需引用 jar 包即可 !
完全不需要了解 Angular / React / Vue / Jquery
而且不需要了解 JavaScript / HTML / CSS
甚至不需要了解 Spring MVC / Mybatis / SQL
在线体验 | Demo
演示地址:https://www.erupt.xyz/demo
账号密码:guest / guest
支持主流 4 款现代浏览器,以及 Internet Explorer 11+,可直接运行在 Electron 等基于 Web 标准的环境上
演示截图 | Screenshot ⛰
Atitit.dwr3 不能显示错误详细信息的解决方案,控件显示错误详细信息的解决方案 java .net php
Atitit.dwr3不能显示错误详细信息的解决方案,控件显示错误详细信息的解决方案java.netPHP
1.Keyword/subtitle 1
2.使用dwr3的异常convert处理不能解除,按照盗垒能解除了.... 1
3.使用js回回调功能处理...还是不能,子能显示个..javaClassName:"java.lang.Throwable",message:"Error"} 2
4.异常转换器 2
5.当然如果想要只针对某一个function来进行超时/警告/错误处理的话也是可以的 4
6.自定义异常处理系统:: 4
6.1.异常捕获 4
6.2.异常显示 4
6.3.Alert不能显示满的格式异常信息的解决之道::自定义页面显示 5
6.4.htmlEncode的问题 6
7.参考 6
1.Keyword/subtitle
控件显示错误详细信息的解决方案
控件调试解决方案
团队建设---技术建设---调试方法
2.使用dwr3的异常convert处理不能解除,按照盗垒能解除了....
<convertmatch="java.lang.Exception"converter="exception">
<paramname="include"value="message"/>
</convert>
<!--下面一定要配置,不然会报如下错误:org.directwebremoting.util.CommonsLoggingOutputerror严重:Noconverterfoundfor'java.lang.StackTraceElement'-->
<convertmatch="java.lang.StackTraceElement"converter="bean"></convert>
自定义的异常能显示了,走十默认的异常不能....
3.使用js回回调功能处理...还是不能,message:"Error"}
//DWrengine.setErrorHandler(ehO9);jeihaosyodwr2d
functionerrh(errorString,exception){
// alert(errorString);
// alert(JSON.stringify(exception));
eval(dwrxO9).getErr( function(data){
alert(data);
window.open("<%=path%>/com.attilax/util/dwrerr.jsp");
});
}
dwr.engine.setErrorHandler(errh);
4.异常转换器
\
我们在服务器端写业务逻辑的时候,通常会利用try{}catch{}捕获异常,但是现在对于前台调用后台的业务逻辑,我们如果在后台发生了一些异常,在前台如何让他显示出来,这里dwr为我们提供了一种转换器(Exception转换器),但是这种转换器如果我们不显示的表现出来,它会默认的给我们提供一个error的异常出来,后台报的异常会在前台以error的方式给我们显示,但是不会吧详细的信息暴露出来,所以我们需要自己配置error的转换器,然后把需要的异常信息给显示出来。举例:
在engine.js中常用的方法有DWrengine.setErrorHandler(function)对错误的处理DWrengine.setWarningHandler(function)对警告的处理DWrengine.setTimeout()设置超时的时间DWrengine.setAsync(false);设置DWR为同步调用
DWrengine.setAsync(true);设置DWR为异步调用
运行调用打印Error。就是dwr框架给我们指定的,如果我们后台访问的时候发生异常,前台为我们的提示信息就为Error,相当于这些普遍的异常都会以Error的形式给我们显示。
如果我们现在不想要Error,我们想要知道前台给我们报的错误是针对后台哪一个异常,我们就需要这个异常转换器来给我们指定这种异常的转换,然后把这种异常信息捕获到前台,前台给我们打印出来,这就要用到dwr给我们提供的内置的转换器,在dwr.xml里面配置:
<convertmatch="com.ryanlu.exception.FunkyException"converter="exception">
<paramname="include"value="message"/></convert>
只要配置了这种异常处理转换器,后台发生异常,前台就可以给我们打印出来.运行结果:"异常的详细信息,date=MonJan01200810:00:00GMT+0100"。这说明通过配置异常处理转换器,在前台可以捕获后台发生的异常,而且是详细的异常信息。
因为Ajax含义中的"A"就是指的asynchronous(异步),那么每个Demo.Method执行都是在异步情况下完成的.如果要指定全局的超时设置那么就可以通过DWrengine.setTimeout()来完成
同样的道理,DWrengine.setErrorHandler(function),DWrengine.setWarningHandler(function)用来设置全局的错误和警告处理
5.当然如果想要只针对某一个function来进行超时/警告/错误处理的话也是可以的
如下:Demo.method(params,{callback:function(data){alert("itworked");},errorHandler:function(message){alert("itbroke");},255)">timeout:1000});
注意:callback和errorHandler是engine.js里面的变量。用来处理异常。这样写的好处是,如果正常执行会调用callback函数,如果发生异常会调用exceptionHander函数来处理。注意callback和errorHandler必须按照上面的方式来写,这是engine.js里面规定的。
6.自定义异常处理系统::
Thinki:::不个异常抓取,放得个session黑头.在使用dwr调用...
6.1.异常捕获
三,自定义的excator不能使用,好像dwr的过滤器首先调用了,不个异常吃兰,闪的excator马异常兰...子好到个调用方法南儿加磊个捕获...
6.2.异常显示
Storeex
@RemoteMethodpublicvoidsave_map(Mapmp){
try{
this.basesvs.save_map(mp);
}catch(Exceptione){
DwrX.getSession().setAttribute("errO9",core.getTrace(e));
thrownewRuntimeException("--oa1c:"+e.getMessage(),e);
}
}
--------showex
}
//DWrengine.setErrorHandler(ehO9);jeihaosyodwr2d
functionerrh(errorString,exception){
// alert(errorString);
//alert(JSON.stringify(exception));
eval(dwrxO9).getErr(function(data){
alert(data);
window.open("<%=path%>/com.attilax/util/dwrerr.jsp");
});
}
dwr.engine.setErrorHandler(errh);
6.3.Alert不能显示满的格式异常信息的解决之道::自定义页面显示
window.open("<%=path%>/com.attilax/util/dwrerr.jsp");
<%=core.txt2html(request.getSession().getAttribute("errO9"))%>
6.4.htmlEncode的问题
publicstaticStringtxt2html(Objects2){
//attilax老哇的爪子2_r_1o03
Strings=StringEscapeUtils.escapeHtml4(s2.toString());
s=s.toString().replaceAll("\r\n","<br>\r\n");
s=s.toString().replaceAll("","");
s=s.toString().replaceAll("\t","");
returns;
}
7.参考
DWR异常处理-RyanLuX的专栏-博客频道-CSDN.NET.htm
关于Dwr3.0 纯注解 (纯 Java Code 配置) 配置与应用浅析一之零配置文件化和dw写java的问题就给大家分享到这里,感谢你花时间阅读本站内容,更多关于 Erupt 1.10.9 发布,纯注解、低代码,高效开发全领域后台,增加云原生分布式开发支持、 Erupt 1.8.1 发布,纯注解,零前端代码,低代码开发 ADMIN,不生成任何代码、 Erupt 1.8.2 发布,矩阵式配置中心,纯注解,零前端代码,低代码开发 ADMIN、Atitit.dwr3 不能显示错误详细信息的解决方案,控件显示错误详细信息的解决方案 java .net php等相关知识的信息别忘了在本站进行查找喔。
本文标签: