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());
//......................................................
}
}