- 浏览: 116417 次
- 性别:
- 来自: 深圳
文章分类
最新评论
-
czqjay:
news/index/{pageNum}/{author} { ...
来谈谈REST、RBAC下的URL权限控制 -
csumck:
这也有一个在线时序图工具 http://echoma.git ...
推荐一个不错的在线“画”时序图的软件(通过文字生成图片) -
cpop:
...
如何将自己的jar包Release到Maven中央仓库中 -
yangzai911:
如果 accept-language中有值,那么也是默认取第一 ...
Play framework 国际化 -
wangyong8861850:
[color=darkred][/color][size=x- ...
EWeb4J 1.9.1 新版本发布 基于Servlet/JDBC的轻量级web开发框架
主要增加以下更新:
验证器
声明式事务
7个默认Action方法
PS:这个例子也演示了如何使用ActiveRecord + Control + Validator 完成 Crud 。
1.验证器
1.8.6以及更旧版本的验证器使用起来非常鸡肋。主要存在一下几个缺点:
验证规则定义之后,只要是控制器的属性,所有该控制器下的Action方法被执行的时候都会强制的激活验证程序。
验证程序检测到错误信息后,框架自己把它给处理了,虽然能满足一定的需求,但是这种方式让开发者无法自己灵活控制。长久来说是不好的。
基于上述两点,本次即将发布的版本1.9针对它们做了改善。请先看看下面这段代码;
Pet.java
PetsControl.java
上面有个 doSearchAtGet 方法不是默认约定的方法,是属于自定义的Action方法。请对照前面博文中提到的 Action 方法名字新语法支持的内容。
注意对照 7 个默认的方法:
当执行 GET /pets/new 打开 new.html后,直接什么也不填写就提交,然后验证器生效,页面上会打印:
可以看到好几个Action方法上面都有 @Validate 注解。这个注解填写一个字符串数组。这些数组声明了在执行这个Action的时候哪些参数需要被验证。具体的验证规则交由属性上的那些类似 @Required @Size @Forbid 这样的注解来定义。也就是说:
验证过程分为两点:
1.定义规则, 在属性上面标注 @Required 等等的注解。
2.触发验证行为, 在Action方法上标注 @Validate({"param1", "param2"}),来声明那些需要被验证的参数
还有最后一个就是验证行为一旦触发,并且检测到错误消息后,框架不再截断当前Action的执行,而是将验证信息封装到一个 Validation 对象里面,就像:
具体怎么判断是否验证不通过,直接调用:
然后取出所有的参数验证信息:
上面这个 Map 里面是 “参数名”-“验证信息”这样的结构的。只要某个参数违反了验证规则的话,那么这个Map里面就会存在该参数以及对应的验证错误消息。
例如:
这个PetControl的代码最好细细品读。方能理解一些约定思想。
最后重申:约定优于配置, 配置覆盖约定。
PS:这个例子也演示了如何使用ActiveRecord + Control + Validator 完成 Crud 。
1.验证器
1.8.6以及更旧版本的验证器使用起来非常鸡肋。主要存在一下几个缺点:
基于上述两点,本次即将发布的版本1.9针对它们做了改善。请先看看下面这段代码;
Pet.java
@Entity @Table(name = "t_pet") public class Pet extends Model { public final static Pet inst = new Pet(); @Required @Length(min = 6, max = 6) private String num; @Required @Length(min = 2, max = 6) @Chinese @Forbid(words = {"性爱", "革命"}) private String name; @Size(min = 1, max = 10) private int age = 1; @Required @Enumer(words = { "猫", "狗" }) private String type; @Override public String toString() { return "Pet [num=" + num + ", name=" + name + ", age=" + age + ", type=" + type + ", id=" + id + "]"; } //setters and getters }
PetsControl.java
public class PetsControl { private final static String PAGE_INT = "分页参数必须是整数格式"; private final static String PAGE_VALID = "分页参数必须大于 0 "; private final static List<String> TYPES = Arrays.asList("狗", "猫"); private Pet pet = new Pet();// inject when create and update @Required @Size(min = 1) @Int private Long id; @Int(mess = PAGE_INT) @Size(min = 1, mess = PAGE_VALID) private int pageNum = 1; @Int(mess = PAGE_INT) @Size(min = 1, mess = PAGE_VALID) private int numPerPage = 10; private String keyword = ""; @Validate({ "pageNum", "numPerPage" }) public String index(Validation val, Map model) { if (val.hasErr()) return JsonConverter.convert(val.getAllErr()); model.put("pets", Pet.inst.find().fetch(pageNum, numPerPage)); model.put("dpc", new DivPageComp(pageNum, numPerPage, Pet.inst.count())); return "html"; } public String doSearchAtGet(Map model) { model.put("pets", Pet.inst.find("name like ?", "%" + keyword + "%") .fetch()); return "fmt:pets/view/list.html"; } @Validate("pet.*") @Transactional public String create(Validation val, Map model) { if (val.hasErr()) return JsonConverter.convert(val.getAllErr()); pet.create(); model.put("types", TYPES); return "index"; } @Validate({ "id", "pet.*" }) @Transactional public String update(Validation val, Map model) { if (val.hasErr()) return JsonConverter.convert(val.getAllErr()); pet.setId(id); pet.save(); model.put("types", TYPES); return "index"; } @Validate("id") @Transactional public String destroy(Validation val) { if (val.hasErr()) return JsonConverter.convert(val.getAllErr()); pet.setId(id); pet.delete(); return "index"; } @Validate("id") public String show(Validation val) { if (val.hasErr()) return JsonConverter.convert(val.getAllErr()); pet.setId(id); pet.load(); return "html"; } @Validate("id") public String edit(Validation val, Map model) { if (val.hasErr()) return JsonConverter.convert(val.getAllErr()); pet.setId(id); pet.load(); model.put("types", TYPES); return "html"; } public String editNew(Map model) { model.put("types", TYPES); return "html"; } //setters and getters }
上面有个 doSearchAtGet 方法不是默认约定的方法,是属于自定义的Action方法。请对照前面博文中提到的 Action 方法名字新语法支持的内容。
注意对照 7 个默认的方法:
HTTP Method | URI | Class.Method | Params |
GET | /demo | DemoControl.index | |
POST | /demo | DemoControl.create | |
PUT | /demo/{id} | DemoControl.update | id={id} |
DELETE | /demo/{id} | DemoControl.destroy | id={id} |
GET | /demo/{id} | DemoControl.show | id={id} |
GET | /demo/{id}/edit | DemoControl.edit | id={id} |
GET | /demo/new | DemoControl.editNew | id={id} |
当执行 GET /pets/new 打开 new.html后,直接什么也不填写就提交,然后验证器生效,页面上会打印:
{"pet.num":"请完成必填内容","pet.name":"请填写全中文"}
可以看到好几个Action方法上面都有 @Validate 注解。这个注解填写一个字符串数组。这些数组声明了在执行这个Action的时候哪些参数需要被验证。具体的验证规则交由属性上的那些类似 @Required @Size @Forbid 这样的注解来定义。也就是说:
验证过程分为两点:
1.定义规则, 在属性上面标注 @Required 等等的注解。
2.触发验证行为, 在Action方法上标注 @Validate({"param1", "param2"}),来声明那些需要被验证的参数
还有最后一个就是验证行为一旦触发,并且检测到错误消息后,框架不再截断当前Action的执行,而是将验证信息封装到一个 Validation 对象里面,就像:
@Validate({ "id", "pet.*" }) @Transactional public String update(Validation val, Map model) { if (val.hasErr()) return JsonConverter.convert(val.getAllErr()); return "通过验证啦..."; }
具体怎么判断是否验证不通过,直接调用:
boolean flag = val.hasErr();
然后取出所有的参数验证信息:
Map<String,String> errors = val.getAllErr();
上面这个 Map 里面是 “参数名”-“验证信息”这样的结构的。只要某个参数违反了验证规则的话,那么这个Map里面就会存在该参数以及对应的验证错误消息。
例如:
{"pet.age":"请填写一个大小介于 1 到 10 之间的整数","pet.num":"请填写长度介于6到6之间的文本","pet.name":"请不要包含下列字眼:[性爱#革命] "}
这个PetControl的代码最好细细品读。方能理解一些约定思想。
最后重申:约定优于配置, 配置覆盖约定。
发表评论
-
EWeb4J 1.9.1 新版本发布 基于Servlet/JDBC的轻量级web开发框架
2012-11-28 22:08 2829EWeb4J 是一个基于 Servlet/Jdbc 构建的轻量 ... -
EWeb4J-SolidBase 发布新版本
2012-07-08 12:41 2137SolidBase项目是采用 DWZ + EWeb4J 开发的 ... -
EWeb4J 框架迁移到 GitHub
2012-07-05 10:02 1890EWeb4J 框架: https://github.com/ ... -
发布一个EWeb4J-1.9的Demo
2012-07-04 16:38 26EWeb4J-1.9框架发布在即,在此之前,发布一个小Demo ... -
EWeb4J-1.9-文件上传下载和生成建表脚本
2012-06-09 12:11 2303毕业了。高兴一下,哈。 一直以来,eweb4j framew ... -
SolidBase 二次开发 GIS 截图
2012-05-07 16:12 1919有位大哥哥使用 EWeb4J 的项目 SolidBase 作为 ... -
EWeb4J 国际化支持出炉啦(有源码看)
2012-05-06 15:31 2059很荣幸也很开心地公布,EWeb4J 支持国际化了。并且有着它独 ... -
Play framework 国际化
2012-05-03 20:04 4307Play的国际化操作还是非常简单的。大概分为四步: 1. ... -
解决Dojo的Widget在创建ArcGIS的Map对象时出现ID已被Registered的错误
2012-04-25 19:23 3139今天在用Dojo的toolkit(Dijits)创建ArcGI ... -
eweb4j在线演示程序更新
2012-04-25 09:25 2102访问地址:SolidBase 增加菜单显示权限 ... -
EWeb4J-1.9-继续改善ActiveRecord支持【级联】操作
2012-04-17 20:58 1488老习惯:约定优于配置 ... -
eweb4j-1.9-支持ActiveRecord模式
2012-04-06 20:46 1617@Entity @Table(name="t_ ... -
(不断更新)EWeb4J-1.9-SNAPSHOT最近进程
2012-03-28 23:33 1815经过奋战,终于有个稳定点的SNAPSHOT版本咯。 较之上个 ... -
eweb4j演示项目-SolidBase增加对菜单显隐的权限控制
2012-03-28 14:41 1904昨晚捣鼓到两点多才弄好,今天整理了下,大概把菜单权限控制做好了 ... -
(下篇)单例POJO实现CRUD+分页+搜索Demo
2012-03-23 23:14 2本篇程序特点: POJO式的控制器,无需继承、无需实 ... -
体验快速开发2:单例POJO实现CRUD+分页+搜索Demo
2012-03-23 22:54 29程序特点: POJO式的控制器,无需继承、无需实现接 ... -
体验快速开发:只有一个控制类实现的CRUD+分页+搜索Demo
2012-03-22 22:17 182╮(╯▽╰)╭,本来不想谈什么快速开发的,但是最近老是有人拿什 ... -
如何将自己的jar包Release到Maven中央仓库中
2012-03-20 17:17 4439PS:真正要发布到Maven中央库中是首先需要到https:/ ... -
EWeb4J-1.8.6 发布,同时带来一个演示项目
2012-03-08 17:44 2990距离上次1.7的发布已经过去5个月了。首先值得高兴的是EW ... -
推荐一个不错的在线“画”时序图的软件(通过文字生成图片)
2012-02-26 21:00 15679首先看看效果吧: 还有很多其他的风格可以选择。例如 VS ...
相关推荐
eweb4j是一个Java开发框架,它专注于提供高效、轻量级且易于使用的Web应用程序解决方案。这个框架的设计理念是简化开发流程,提高开发效率,同时保持代码的清晰性和可维护性。下面我们将深入探讨eweb4j框架的核心...
EWeb4J ? = EWeb4J 是一个基于 Servlet/Jdbc 构建的轻量级 Java Web 开发框架。它可以代替 SSH 来开发一个完整的 Web 应用程序。 它专注于 少侵入、少配置、松耦合、RESTful架构风格的 Web 应用程序开发。 EWeb4J ...
`eweb4j`作为一个全面的Web应用框架,具备了MVC架构、数据访问、模板引擎、安全控制等核心功能,且源代码开放,方便开发者深入理解和定制。通过了解和掌握`eweb4j`,开发者可以快速构建稳定、高效的Web应用程序。...
Rockwell 1756-Eweb模块
在描述中提到的“eweb编辑器 要改下db中的后缀为asp”,这可能是指在使用eweb编辑器进行网站开发时,需要将数据库连接文件或动态页面文件的扩展名从原本的格式更改为ASP(Active Server Pages)格式。ASP是一种微软...
作为一个现代的在线编辑器,EWeb可能集成了版本控制系统,如Git。这样,你可以追踪代码更改,回滚到之前的版本,或者与团队成员协作。实例可能包括如何使用EWeb进行版本控制操作的指南。 七、实际应用示例 实例可能...
1756-EWEB
在线编辑HTML,使用户方便使用编码在线编辑HTML,使用户方便使用编码
《EWeb编辑器2.80:打造高效网页创作利器》 EWeb编辑器,全称为"EWeb Editor",是一款专业且用户友好的网页编辑工具,尤其以2.80版本备受好评,被誉为“绝对好用”。这款编辑器旨在简化网页制作流程,提升开发效率...
4. **HTML源码编辑**:对于有经验的用户,eweb也提供了直接编辑HTML源码的功能,以便进行更精细的控制和自定义。 5. **表格与布局**:编辑器内建了表格创建和编辑工具,用户可以轻松创建复杂的表格结构,调整列宽和...
《eWeb Editor客户端:在线文本编辑器的深度解析与应用》 eWeb Editor是一款功能强大的在线文本编辑器,尤其在Web开发领域中被广泛应用。它以其便捷的操作界面和丰富的编辑功能,为网络编程人员提供了极大的便利。...
ASP常用的后台编辑器,带图片上传功能 调用方法如下例子: <textarea name="nr" ROWS="20" COLS="70">%=Server.HTMLEncode(rs("nr"))%></textarea> <iframe ID="eWebEditor1" src="../eWebEditor/...
EWeb4J支持多种数据库,并提供了强大的表单验证功能,使得开发者可以轻松创建复杂的数据驱动型Web应用。 #### 3. Spring Roo 1.2.1 **下载链接**: ...
热备系统是指在控制系统中设置两个或多个控制器,其中一个作为主控制器工作,其余作为备用控制器。当主控制器发生故障时,备用控制器能立即接管控制任务,确保系统的连续运行不受影响。热备系统主要用于对生产过程...
《eWeb7.3.0商业版:在线HTML编辑器的高效工具》 eWeb7.3.0商业版是一款专为网页制作和内容编辑设计的在线HTML编辑器,其核心在于提供用户友好的界面和丰富的功能,使得非专业程序员也能轻松地创建和编辑网页内容。...
eWeb editor编辑器文件,说明,使用方法:将解压后的editor文件夹拷贝到项目根目录下,在需要的页面中加入以下内容: 办事内容:</font></td> ;style=s_blue" frameborder="0" width="99%" ...
让 AsciiDoc 成为您的文学编程工具集的一部分。 使用 eWEB,您可以使用嵌入的 WEB 代码片段编织和缠结作为 AsciiDoc 文档编写的文字程序。
4. **表格与列表**:对于数据展示,编辑器提供表格创建和编辑功能,包括单元格合并、行列插入删除、表格样式设置等。同时,也支持无序列表和有序列表的创建,便于组织信息。 5. **链接管理**:用户可以在编辑器中...