ERROR [org.apache.struts2.portlet.dispatcher.Jsr168Dispatcher] Could not find action

依據訊息來看,最大的可能是 struts.xml 沒有定義到 action,但是我 struts.xml 一個字一個字的檢查的十幾次,怕 class 打錯還特別從 source 檔 copy / paste 上去還是錯,最後找到的原因是 form tag 和 action setter 資料型態的的問題。

錯誤示範一、

<s:textarea name=”person.description”/>

person 是 hibernate tool 產生的物件,description 是 SQL 2000 ntext 欄位,java 資料型態是 java.sql.Clob,沒有轉換型態直接塞入物件就會 Could not find action 。

錯誤示範二、

<s:head theme=”ajax”/>

<s:datetimepicker name=”person.birthday”/>

birthday 是 SQL 2000 datetime 欄位,java 資料型態是 java.util.Date,同樣的直接塞進物件的結果和上個例子一樣,struts datetimepicker tag 文件有提到要先用 SimpleDateFormat 處理 submit 的資料。

2008.11.11 補充

不論是 portlet 或 struts web application 開發都有機會遇到 Could not find action 或 There is no Action mapped for action 的問題,目前整理 troubleshooting 的 checklist 如下:

  • struts 的 include 檔案是否都有正確 include 到,是否檔名打錯了
  • action 是否有 compile error 或資料型態轉換問題
  • 當 struts 的 package 有定義 namespace 時請使用絕對路徑,少用相對路徑,會減少很多的困擾

1 Star2 Stars3 Stars4 Stars5 Stars (No Ratings Yet)

Loading...