因为只有input() 和 save()两个函数需要二次绑定,而list()等函数并不需要,所以根据命名约定实现了
prepareInput(),prepareSave()两 个函数,Struts2会自动在执行input()与save()前执行它们,详见CRUDAction基类.
4.2. CRUDAction基类(涉及CRUD时的可选基类):
规范了CRUD函数的名称,规定使用ModelDriven和Preparedable接口,并规范了prepare二次绑定接口只在input和 save函数中的使用
流程如下:
1. 用户打开用户列表页,访问/user.action
2. a.执行默认的execute() 函数,实际执行list() 函数。
3. b.list() 函数查询列表放入某list变量,返回SUCCESS,默认跳转到user.jsp 4. c.user.jsp取出action中的list变量进行渲染。 5. 用户新增对象,访问/user!input.action
6. a.首先将id放入id变量,执行prepareInput()函数创建一个新的user变量 7. b.input() 函数,返回INPUT,默认跳转到user-input.jsp
8. c.user-input.jsp 执行getModel()获得user变量渲染input框 9. 用户提交Form,访问/user!save.action
10.a.执行preparedSave()函数创建新的user变量,将input框的内容绑定到getModel()获得的user变量
11.b.执行save()函数保存user,返回RELOAD,跳转到@Result中定义RELOAD页面,以redirect方式重新打开 /user.action 12.用户修改对象,访问/user!input.action?id=1
13.a.绑定id=1到id变量,执行prepareInput()从数据库查询出user。 14.b.下同2.
15.用户提交Form,访问/user!save.action
16.a.绑定id=1到id变量,执行prepareSave()从数据库查询出user。 17.b.下同3.
3.3 View相关
View /Taglib 相关规则详见View/Taglib,
? JSP放在WEB-INF/content 中保证文件不可读,使SpringSecurity专心的只过滤*.action。
? 基于Convention的神奇映射能力,WEB-INF/content/login.jsp的访问地址为/login.action,而且 无需编写真正的
LoginAction.java。
?
3.4 输入校验与国际化
Struts2的validate框架优点是可以在客户端和服务端同时进行校验。
? 但是因为JQuery的validate plugin客户端检测更加好用,而且客户千方百计绕开客户端,直接发送一个邮箱格式不正确的请求意
义不是很大,真的很紧要校验,还可以在服务层进行(参 考hibernate validator)。 ? 所以用了JQuery的validate plugin,见Javascript。
? 国际化,因为国际化式的开发是有成本的,挺麻烦的,因为不是每个项目都需要国际化的能力,所以在默认的mini-web示例里就不
演示了。
?
3.5 信息与异常显示
1.页面在跳转时会丢失addActionMessage()的信息, 在struts.xml中配置使用store interceptor,可以在redirect页面时,将信息存储在session中.
2.尽量使用addActionMessage来添加信息, 如果用addActionError会自动跳到input页。
4. SpringSide Core的封装
4.1. Struts2Utils:
绕过jsp/freemarker直接输出字符串/JSON/XML的便捷函数,用于ajax请求等简单输出结果,支持 encoding,no-cache等参数。 ? 获取http request/response/session的简化方法.
?
1.资料
JSP2.0 笔记(江南白衣博物馆) ? Struts2 Tag Reference ? 2. in SpringSide 3
2.1 JSP 2.0
因为开发人员,编辑器等原因,使用JSP2.0 而不是Freemaker作为模板,JSP2.0的EL已经非常简洁(见JSP2.0 笔记)。
同时因为目前的IDE智能程度颇高,因此不使用SiteMesh/Tiles式的光猪页面,方便IDE根据完整页面内容进行提示与校验,在有页面重用时使 用jsp中的
2.2 关于Taglib
1. 页面内容显示使用原版的html语法,少用taglib,使用JSP2.0 EL 输出动态变量。 2. 尽量不使用Struts2的UI taglib,尤其是封装Dojo的ajax theme。
3. 控制语句统一使用Struts2的taglib
且Struts2的 OGNL语法强大(但需要学习)。 4. 不建议使用的tag
4.1. 4.2. 2.3SpringSide改造的taglib springside改进了一些taglib的输出模板,详见在mini-web的src/resources/theme/custom目录,在使用时 要将theme设为custom,见Struts2资料 下例中Action里有一个List 但 2.4 html格式 页面尽量符合Xhtml 1.0,在页首加入,Eclipse会自动检查: 2.4 URL Rewrite Struts2的action url对google与用户都不那么友好,所以对外的网站可以使用url rewrite filter来改善。 见showcase的示例,首先在web.xml中加入url rewrite filter,注意需放到struts2 filter的前面,然后在WEB-INF/下放一个urlrewrite.xml进行定义,使得 /common/users.htm 等于 /common/user.action /common/user/1.htm 等于 /common/user!input.action?id=1