Springside - 3.3.2 - 技术参考手册(8)

2020-02-21 15:32

因为只有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 ,因为JSTL的taglib不支持if-else,而

且Struts2的 OGNL语法强大(但需要学习)。 4. 不建议使用的tag

4.1. 不使用:该tag作用为自动在绝对路径中加入context-path保持灵活度。但层层的节点 使得阅读性很差。使用taglib.jsp中放入context-path变量,然后在页面上直接

4.2. 用普通html代替,如果Form中有多个button,要提交到不同的method甚至不同action,实际的 html效果为:

2.3SpringSide改造的taglib

springside改进了一些taglib的输出模板,详见在mini-web的src/resources/theme/custom目录,在使用时 要将theme设为custom,见Struts2资料

之类的select,check,radio taglib都挺好用的。

下例中Action里有一个List roleIds代表要选中的角色,一个List roleList代表完整的角色列表,Role有两个属性:id 和 name。

在选项较多的时候无法做到很好的换行与对, 因此Spring使用了table来实现,设定每行3个选项。 也是不错的标签,SpringSide也作了美化,比如可 以点击关闭消息。

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 ^/common/users.htm$


Springside - 3.3.2 - 技术参考手册(8).doc 将本文的Word文档下载到电脑 下载失败或者文档不完整,请联系客服人员解决!

下一篇:1、浅谈加强房地产开发企业财务预算管理

相关阅读
本类排行
× 注册会员免费下载(下载后可以自由复制和排版)

马上注册会员

注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信: QQ: