Struts的招牌与用户群 + Webwork的较优雅架构 + Convention Plugin实现零配置文件,Struts2已经成为传统MVC里的最安全选择。
当然,GWT,Flex等是另一个潮流了。
Convention Plugin是2.1.6最新坐正的零配置Plugin,取代了原来的CodeBehind等插件,详细见详见Struts2笔记。 及其官方文档,Alfa.Shi翻译了中文版。
SpringSide 在struts.xml中重新定义扫描了根package名为web, 即会扫描xxx.xxx.web下所有的子Package。
CRUD的Action全部使用Prepareable与ModelDriven接口,两个接口都是CRUD界面必备,详见Struts2笔记。 而非CRUD的action是否使用这两个接口就看具体情况了。 因为只有input() 和 save()两个函数需要二次绑定,而list()等函数并不需要,所以根据命名约定实现了prepareInput(),prepareSave()两个函数,Struts2会自动在执行input()与save()前执行它们,详见CRUDAction基类.
规范了CRUD函数的名称,规定使用ModelDriven和Preparedable接口,并规范了prepare二次绑定接口只在input和save函数中的使用 流程如下:
用户打开用户列表页,访问/user.actiona.执行默认的execute() 函数,实际执行list() 函数。b.list() 函数查询列表放入某list变量,返回SUCCESS,默认跳转到user.jspc.user.jsp取出action中的list变量进行渲染。 用户新增对象,访问/user!input.actiona.首先将id放入id变量,执行prepareInput()函数创建一个新的user变量b.input() 函数,返回INPUT,默认跳转到user-input.jspc.user-input.jsp 执行getModel()获得user变量渲染input框 用户提交Form,访问/user!save.actiona.执行preparedSave()函数创建新的user变量,将input框的内容绑定到getModel()获得的user变量b.执行save()函数保存user,返回RELOAD,跳转到@Result中定义RELOAD页面,以redirect方式重新打开/user.action 用户修改对象,访问/user!input.action?id=1a.绑定id=1到id变量,执行prepareInput()从数据库查询出user。b.下同2. 用户提交Form,访问/user!save.actiona.绑定id=1到id变量,执行prepareSave()从数据库查询出user。b.下同3.1.页面在跳转时会丢失addActionMessage()的信息, 在struts.xml中配置使用store interceptor,可以在redirect页面时,将信息存储在session中.
2.尽量使用addActionMessage来添加信息, 如果用addActionError会自动跳到input页。