(不断更新)EWeb4J-1.9-SNAPSHOT最近进程

经过奋战,终于有个稳定点的SNAPSHOT版本咯。

较之上个版本1.8.6,本版本1.9-SNAPSHOT有以下几个更新点:

[*] SolidBase 添加菜单显隐权限控制,包括导航菜单(href=xxx.jsp或xxx.html)的控制
[*] SolidBase 对导航菜单(href=xxx.jsp或xxx.html)的处理修改,原先为直接服务端跳转到main/veiw下的xxx.jsp或者xxx.html,现在改为将xxx.jsp/xxx.html整个字符串设置到request.setAttribute("switchEnvPath", "xxx.jsp"),然后统一跳转到main/view/switchEnv.jsp,然后在switchEnv.jsp的内容为:

<%@ page contentType="text/html; charset=utf-8" language="java" pageEncoding="utf-8"%>
<div class="accordion" fillSpace="sideBar">
<jsp:include page="/${switchEnvPath}"></jsp:include>
</div>

这样目标xxx.jsp/xxx.html页面是从WebContent中开始寻找并且被包含进来。并且因为这里已经包裹了这段代码:

<div class="accordion" fillSpace="sideBar">
</div>

因此在xxx.jsp/xxx.html中已经不再需要包裹上面这段代码了。

[*] SolidBase的菜单显示增加了session缓存,这样不需要每次都查询数据库,不过带来的问题是菜单的修改不能马上见效,若登陆账号是超能力用户或者没有任何角色信息的话,则不会缓存,否则需要重新登录才能看到最新的菜单修改(包括菜单显隐的权限分配修改)

eweb4j 框架更新了比较多。详细看看下面列表
[*] 几个DAO增加对Map的支持,使用map可以不需要写model类
[*] MVC增加7个默认action,约定视图和URI-Mapping,例如 DemoControl
[table]
|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}|
[/table]
[*] 控制器属性若提供getter方法,则会作为http响应视图渲染的一个数据模型。类似Struts2的ModelDriven但不需要继承来获得。
[*] 除了使用属性getter方法作为视图模型数据外,还可以在Action方法参数里声明一个没有任何注解的Map model,它可以作为视图模型数据,往里面放数据就相当于request.setAttribute一样的效果。
[*] 修改uri格式:xxx@POST => xxx#POST, 即符号 '@' 改成 '#'
[*] 改善Action跳转:return "action:xxx",之前是使用response.sendRedirect来实现的,但是这样的方式使得HTTP请求只能是GET方式的,如果要重定向到一个HTTP方法为POST或者PUT或者DELETE话,显然这样是无法满足需求的。于是,对 return "action:xxx"的处理方式改成:

return "action:xxx@PUT?name=weiwei&age=5";
//符号@只能出现一次,框架不再采用response.sendRedirect的方式来处理,而是构建一个
form表单:

<form id="form_id" action="xxx" method="post">
<input type="hidden" name="_method" value="PUT" />
<input name="name" value="weiwei" />
<input name="age" value="5" />
<input type="submit" />
</form>


<script>document.getElementById('form_id').submit();</script>

然后使用response.getWriter().print打印上面这段内容,从而实现模拟客户端的请求,这样就支持GET之外的请求了,还可以带参数。

PS:如果指定的Action依然是GET的,则会采用redirect的方式执行,而不是表单的形式

[*] Action方法名支持新的约定格式:[color=red]do[/color]Uri1[color=red]Bind[/color]Param1[color=red]And[/color]Param2[color=red]Join[/color]Uri2[color=red]At[/color]Post[color=red]Or[/color]Get[color=red]Or[/color]Put[color=red]Or[/color]Delete
关键词:do, Bind, Join, And, At, Or
其中每个的意义是:
do:一直到Bind或者At为止的单词都会被解析为 URI
Bind:一直到At或者末尾为止的单词都会被解析为URI中的变量部分/{param1}/{param2}(多个arg用And连接)
Join:一定要跟在Bind之后,例如 doHelloBindNameJoinWorldAtGet = /hello/{name}/world GET
At:一直到末尾为止的单词都会被解析为Http Method(多个method用 Or 连接)


For Example1:

public void doRemoveBindIdAtDelete(int id){}

解析后:
uri => remove/{id}
http => DELETE
访问例子:
DELETE /remove/3

For Example2:

private String name;
public void setName(String name){this.name = name}

public void doHelloBindNameAtGet(){}

解析后:
uri => hello/{name}
http => GET
访问例子:
DELETE /hello/weiwei

For Example3:
public class PetsControl{
public String doBindIdJoinEditAtGet(int id){
return "fmt:pets/view/edit.html";
}
}
解析后:
uri => pets/{id}/edit
http => GET
访问例子:
GET /pets/3/edit


[*] Action增加对FreeMarker模板的支持。
例子一

public String doHelloAtPost(@QueryParam("user") final User user, Map model) {
List<User> list = new ArrayList<User>();
list.add(user);
list.add(new User());
model.put("pojos", list);

return "fmt:pet/view/fmt-list.html";
}

fmt-list.html

<#list pojos as user>
<p>${user.name}-${user.age}</p>
</#list>

例子二

public String doTestAtGet() {
return "action:pet/hello@POST?user.name=微微&user.age=23";
}

@Result(name = { "success" }, type = { "fmt" }, value = { "index.html" })
public String doIndexAtGet(Map model) {
model.put("message", "Hello FreeMarker!");
return "success";
}

index.html

<h1>${message}</h1>


[*]将CascadeDAO的 "select *" 修改为 "select xxx,xxx,xxx"
[*] MVC.Action增加XML的视图响应。@Produces(MimeType.XML)
[*] MVC.Action增加对FreeMarker模板的支持
[*] 各个模块改善日志功能,提供多日志配置。控制台打印开关等。
[*] 各个模块的sacnPackage增加绝对路径,必须以"AP:"开头。主要用于测试
[*] DAO增加分页,DAOFactory.getDAO(Pet.class).selectAll().query(1, 5);
[*] MVC.Action增加ActiveRecord支持。

@Entity
@Table(name="t_pet")
public class Pet extends Model{
public final static Pet instance = new Pet();
private String name;
private int age;
public Pet(){}
public Pet(String name, int age){
this.name = name;
this.age = age;
}
//setter and getter
}

//使用
new Pet("xiaohei", 5).create();//insert
new Pet("xiaohei", 5).save();//当没有ID值的时候是insert
Pet pet = new Pet("xiaobai",4);
pet.create();//insert这时候pet.id已经被注入了
pet.setName("test");
pet.save();//这时候因为pet.id有值,所以是update

pet = new Pet();
pet.setId(2);
pet.load();//这个时候会通过id值去查询数据库,并将数据注入到pet实例中。

List<Pet> pets = Pet.instance.findAll();
/* 分页 */
List<Pet> page = Pet.instance.find().fetch(10);
page = Pet.instance.find().fetch(2, 5);
/* 条件查询 */
List<Pet> pets = Pet.instance.find("byName", "xiaohei").fetch();
pets = Pet.instance.find("byNameAndAge", "xiaohei", 5).fietch();
pets = Pet.instance.find("name = ?", "xiaohei").fetch();
Pet p = Pet.instance.find("name = ?", "xiaohei").first();
p = Pet.instance.findById(3);
p = Pet.instance.find("byNameAndAge", "xiaohei", 5).first();
/* 删除 */
Pet.instance.delete("byName", "xiaohei");
Pet.instance.deleteAll();
/* 计算 */
long rows = Pet.instance.count();/* select count(*) */
rows = Pet.instance.count("byName", "xiaohei");/* count(*) ... where name='xoapjeo' */

[*] 待续
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
该资源内项目源码是个人的课程设计,代码都测试ok,都是运行成功后才上传资源,答辩评审平均分达到96分,放心下载使用! ## 项目备注 1、该资源内项目代码都经过测试运行成功,功能ok的情况下才上传的,请放心下载使用! 2、本项目适合计算机相关专业(如计科、人工智能、通信工程、自动化、电子信息等)的在校学生、老师或者企业员工下载学习,也适合小白学习进阶,当然也可作为毕设项目、课程设计、作业、项目初期立项演示等。 3、如果基础还行,也可在此代码基础上进行修改,以实现其他功能,也可用于毕设、课设、作业等。 下载后请首先打开README.md文件(如有),仅供学习参考, 切勿用于商业用途。 该资源内项目源码是个人的课程设计,代码都测试ok,都是运行成功后才上传资源,答辩评审平均分达到96分,放心下载使用! ## 项目备注 1、该资源内项目代码都经过测试运行成功,功能ok的情况下才上传的,请放心下载使用! 2、本项目适合计算机相关专业(如计科、人工智能、通信工程、自动化、电子信息等)的在校学生、老师或者企业员工下载学习,也适合小白学习进阶,当然也可作为毕设项目、课程设计、作业、项目初期立项演示等。 3、如果基础还行,也可在此代码基础上进行修改,以实现其他功能,也可用于毕设、课设、作业等。 下载后请首先打开README.md文件(如有),仅供学习参考, 切勿用于商业用途。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值