第一次把自己总结的东西写出来,发现自己理解起来容易,说出来让别人也能明白难,错误之处,请大家指正,欢迎拍砖,哈哈~~
大名鼎鼎的struts2是一个设计优雅的MVC框架——如果你愿意,你可以通过一种非侵入的方式来使用它。struts2的配置方式多样:传统的struts.xml、当然还有传说中的Convention Plugin。
这里要说明的是在struts.xml中使用通配符即Wildcard的问题。
通配符可以被用来匹配action的name属性、result的name属性、method的name属性等,只要你的代码遵循某种规范,并根据你的规范来使用通配符,则可以大大降低配置量。
例如:
struts.xml中有这样一段代码:
这样的配置实在是简单到不行,例如我请求notes_xxx.action,struts2将自动帮我们匹配xxx方法和xxx.jsp页面。
有了这样的配置,如果我要在NotesAction中再添加delete方法,并且希望它跳转到notes_delete.jsp,只需要添加方法和页面就行,不需要任何其他的配置。
看起来一切都那么完美,但是这里却有一个潜在的问题:
NotesAction的代码如下:
例如当我请求notes_save.action时,就抛出了异常:
No result defined for action com.tding.nts.web.action.NotesAction and result list
经过分析,错误原因如下:
当我调用save.action时,struts.xml被解析成这个样子:
可见这时只有一个result即save被定义,而这时save方法调用了list方法并返回了“list”字符串作为result,而此时list为未定义的result,故而出现了错误。
解决方法如下:
1)定义全局的result list
2)取消result中的通配符