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

<!--struts2配置時,在web.xml中的配置如下:-->
<filter>
      <filter-name>struts2</filter-name>
      <filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter</filter-class>
  </filter>
  <filter-mapping>
      <filter-name>struts2</filter-name>
      <url-pattern>/*</url-pattern>
  </filter-mapping>

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

<servlet>
      <servlet-name>dwr-invoker</servlet-name>
      <servlet-class>org.directwebremoting.servlet.DwrServlet</servlet-class>
      <init-param>
          <param-name>debug</param-name>
          <param-value>true</param-value>
      </init-param>
  </servlet>
  <servlet-mapping>
      <servlet-name>dwr-invoker</servlet-name>
      <url-pattern>/dwr/*</url-pattern>
  </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是無效的。

(3)直接在Struts.xml中加入

         <!--該屬性指定需要Struts 2處理的請求後綴,該屬性的默認值是action,即所有匹配*.action的請求都由Struts 2處理.如果用戶需要指定多個請求後綴,則多個後綴之間以英文逗號(,)隔開. -->
         <constant name="struts.action.extension" value="action" />
       

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章