struts2 dwr There is no Action mapped for action ... 原因及解决方案

struts2配置时,在web.xml中的配置如下:

1   <filter>
2       <filter-name>struts2</filter-name>
3       <filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter</filter-class>
4   </filter>
5   <filter-mapping>
6       <filter-name>struts2</filter-name>
7       <url-pattern>/*</url-pattern>
8   </filter-mapping>

dwr 在 web.xml 中的配置如下:

 1   <servlet>
 2       <servlet-name>dwr-invoker</servlet-name>
 3       <servlet-class>org.directwebremoting.servlet.DwrServlet</servlet-class>
 4       <init-param>
 5           <param-name>debug</param-name>
 6           <param-value>true</param-value>
 7       </init-param>
 8   </servlet>
 9   <servlet-mapping>
10       <servlet-name>dwr-invoker</servlet-name>
11       <url-pattern>/dwr/*</url-pattern>
12   </servlet-mapping>

 

struts2 使用 /* 作为 url-pattern,而且在struts机制中,只要请求路径中无后缀名或者后缀名为 .action ,它就当 action 来处理。所以当配置了dwr之后,在测试页中,本来点击类之后应该显示当前系统中对外暴露的JS方法的列表,却显示了There is no Action mapped for action... 类似的信息,就是因为点击了类名链接后,路径中没有了后缀名。解决方法有两个:
(1)在Struts.properties中定义:
  struts.action.extension = action

  因为Struts2缺省配置是:
  struts.action.extension = action,(注意后面有个逗号)

(2)在Struts.properties中设置:
  struts.action.excludePattern = /dwr.*,/webEditor.*(注意,这儿是正则表达式,不是URL匹配模式,所以要写/dwr.*而不是/dwr/*)
  这种写法应配置StrutsPrepareAndExecuteFilter,配置FilterDispatcher是无效的。

posted @ 2013-03-14 19:13  lihui_yy  阅读(1008)  评论(0编辑  收藏  举报