code_prettify

2013年8月13日 星期二

struts 1的 ActionForm, default scope是 session

在 struts-config中, action tag如果沒指定 scope, 預設 scope為 session.
一般都會把 scope設為 request
不過那個爛系統,竟然有一堆都是 default scope
於是就造成了我的悲劇:
public class TheForm extends ActionForm {
private int[] aField;
........
}
jsp
<form name="theForm">
<table>
<tbody id="讓 user新增資料處">
</tbody>
</table>
<input type="button" onclick="在atbody新增一列sample row"/>
</form>
<table id="已經被儲存的新增資料">
<tr><td>
<input name="oldAField" value="1"/>
</tr></td>
<tr><td>
<input name="oldAField" value="2"/>
</tr></td>
<tr><td>
<input name="oldAField" value="3"/>
</tr></td>
</table>
sample row
<tr><td>
<input name="aField" value=""/>
</tr></td>
只准新增,沒有刪除修改.form submit的時候把"讓 user新增資料處"的內容存到 DB.
scenario:
user新增了一筆資料, session還在的時候,同個頁面修改別的地方後儲存.
由於 theForm放在 session裡,上次 submit的新增資料還在theForm裡
但是畫面上沒有新增 aField, 所以 submit出去的 aField是 null, struts不覆蓋 theForm.aFiled.
於是乎,上次的新增資料再次被儲存.

沒有留言: