现在的位置: 首页 > 综合 > 正文

使用通配符时遇到的一个问题

2013年08月11日 ⁄ 综合 ⁄ 共 1766字 ⁄ 字号 评论关闭

第一次把自己总结的东西写出来,发现自己理解起来容易,说出来让别人也能明白难,错误之处,请大家指正,欢迎拍砖,哈哈~~

 

大名鼎鼎的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中的通配符

 

总结:
错误类型:struts2 中 使用通配符时 抛出
No result defined for action xxx.action and result yyy;异常

 

抱歉!评论已关闭.