HTTP Status 404 - No result defined for action xx.xx.xxAction and result error

今天整合一個ssh框架,發現報出這個錯誤,整了幾個鍾,都沒發現有任何錯誤。因爲報錯大概意思是說沒有爲web層的action類聲明一個result返回類型,但是我在struts.xml裏明顯寫了

<action name="studentAction_*" class="studentAction" method="{1}" >
	<result name="list">/jsp/student/list.jsp</result>
</action>

有的啊,有木有,後面索性把<result name="error">/error.jsp</result>也給寫上,結果發現能進入error界面,這就奇怪了,報錯說我沒聲明一個result返回值,但是我有,回去查看action類我也寫了return "list";,我還睜大眼睛前後看了不下20次。。。

public String list() throws Exception {
		//封裝離線查詢對象
		DetachedCriteria dc = DetachedCriteria.forClass(Student.class);
		//判斷接受值不爲空並封裝參數
		if(StringUtils.isNotBlank(student.getStud_name())){
			dc.add(Restrictions.like("stud_name", "%"+student.getStud_name()+"%"));
		}
		//調用Service對象ss查詢分頁數據
		Page pg = ss.getPage(dc,currentPage,pageSize);
		//將Page壓入request域,並轉發至列表屆面顯示
		ActionContext.getContext().put("Page", pg);
		return "list";
	}
完全沒錯的,action和struts.xml配置都沒有錯,然後查看applicationContext.xml文件內也創建了xxAction類,如果沒創建肯定報錯的啊。

<bean name="studentAction" class="com.mylea.web.action.StudentAction" scope="prototype" >
	<property name="ss" ref="studentService" ></property>
</bean>

struts也的確把action的創建交給了spring

<constant name="struts.objectFactory" value="spring"></constant>

等等,我測試error的時候,是可行的,沒有報錯,說明我的bean創建肯定沒問題,然後返回了error說明struts配置也肯定沒問題的,上面這些查看代碼有沒有寫錯其實都是白費功夫,根本沒有問題。

所以問題肯定是發生處理邏輯內部。然後層層尋找,可以線在action層syso一個變量,例如pg,如果沒有打印出來,拿肯定在中間發生了異常。其實用debug好使,後悔沒早用,最後發現我的Page對象(用來分頁顯示的),在計算頁數總頁數this.totalpage = (this.totalcount+this.pagesize-1)/this.pagesize;中,pagesize竟然爲“0“,也不知道爲什麼控制檯沒有報錯。正常來說這是RuntimeException應該會自動終止程序報錯纔對啊。

血的教訓,一定要養成良好的編程習慣,在可能出錯的地方一定要拋異常,其次是我引發上述算術異常是因爲int類型和integer類型混用,沒有統一,導致前面的if(pagesiez==null)這個地方沒有進去,因爲int類型初始值爲0,integer類型初始值爲null,0當然不等於null,所以導致後面出現了除數爲0的錯誤!

以上爲個人遇到的情況,可能不符合其他人報出這個錯誤的原因,不過檢查方法應該通用:

1.按照上面方法檢查一下配置,確定無誤,那麼問題發生在運行中

2.可使用debug模式測試,檢查出變量異常的地方,然後修改即可

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