keyword: struts錯誤,持續構建,checkbox
前天在運行應用時有一個頁面一點button就轉到系統錯誤頁面,折騰了好半天,在Action里打樁調試連調試信息都見不到,還以為時log4j配置出了問題,改來改去也不知道原因在哪,最后檢查居然時在Action里用錯了Form,哎,真是要命.回憶了一下,以前這個地方一直正常,怎么這次修改了別的地方就影響到這了呢,記憶中好像是因為做了一次重構不小心在批量修改的時候把這里給改了.
現在總結一下Struts里可能常出現的錯誤的原因:
1.配置文件里的input或者forward寫錯
2.jsp里的Action對應的.do寫錯,實際就是對應的Form也錯了
3.Action里Form寫錯,或者forward為空
4.還有Form里的屬性和jsp頁面的屬性不一致
經過這次的教訓也讓我有了一個以前不怎么重視的想法要實現,就是持續構建,如果有了持續構建我的每一次的提交都有報告和分析結果出來,防患于未然,也不至于讓我折騰半天為了一行代碼.
方案就選maven + cc .
目前國內用的多么?沒有調查過,不過就我目前了解到的情況,好多公司的做法真是讓人覺得有點shit,但愿越來越好,越來越規范.
寫到這里又想起一個關于jsp的checkbox問題,例如,在一個產品刪除的頁面里,每條記錄前面有一個checkbox,我們一般的做法是給checkbox的value賦值為產品ID的值,然后Action根據ID就可以直接刪除產品了,但是問題是有時候我除了需要刪除這個產品,同時還需要在下一個頁面里再將當前頁面的東西顯示一次,讓用戶確認,就還需要除產品ID以外的信息了,該怎么辦呢? 我以前有一個比較笨的辦法就是在value里拼數據,
比如id | name | quantity | other,最后在Action里再解析,現在想來其實沒有必要,可以用<logic:iterator/>里的indexId屬性來做。
具體請參看這里:
這里貼下關鍵部分的代碼:
jsp代碼:
<logic:iterate id="testqclist" name="testQCActionForm" property="result" indexId="index" >
<tr bgcolor="#FFFFFF">
<td height="26" bgcolor="#EEEEEE">
<div align= "center" >
<input type="checkbox" name="checkboxVal" value="<%=index%>" ></div>
</td>
</tr>
</logic:iterate>
Action代碼: [原文作者寫在Form里實現,不過我個人喜歡在Action里做,看你情況了]

if (checkboxVal != null && checkboxVal.length > 0)
{


for (int i = 0; i < checkboxVal.length; i++)
{

int chkVal = Integer.parseInt(checkboxVal[i]); //取得checkbox的index值

//..........................
checkform.setSaamsampleid (datesampledVal[chkVal].toString());//取得和checkbox為true的其他屬性的值

checkform.setSaamsampleid(saamsampleidVal[chkVal].toString());

//......................................................

}

}