sessionForm

一、差異:

1、sessionForm

點擊添加,發送POST請求,根據流程會調用formBackingObject(),創建一個新的表單對象(假設新建表單的列表記錄為2條),


之後呼叫bindAndValidate()方法將request參數綁定到表單對象中:

<1> 第一次添加時,頁面列表中的記錄和新建的表單列表中的記錄一致,所以綁定參數時不會出錯。

在後面的流程會呼叫isFormChangeRequest(重寫:添加動作返回true),

之後調用onFormChange(重寫:添加時,獲取表單后往list加入一條記錄),那麼showForm就會顯示3條。


<2> 第二次添加時,頁面列表已有3條記錄,但是該次的POST請求還會調用formBackingObject()

重新創建一個表單(裏面只有2條記錄),那麼要將request參數綁定到表單對象的時候,

在第3條記錄時就會出現越界的錯誤。


2、sessionForm

(1)    第一次添加時,會創建一個新的表單,同樣頁面列表記錄和新建的表單一致,所以綁定不會出錯,之後往表單添加一條記錄(共3條)。

(2)    第二次添加時,不會重新創建表單,而是從session中取得原表單(此時裏面已有3條記錄),所以和頁面的數據也一致,綁定不會出錯。

二、總結:

導致該差異的根本原因是

<1> sessionForm在每個請求到達時不會重複調用formBackingObject()創建新的表單,而是從session取得原表單(所以綁定時一致)。

<2> sessionForm則每次請求都會調用formBackingObject()創建新表單(綁定時會不一致)。

三、補充:

情況:sessionForm的情況下(假設新建表單有2條記錄)

如果在瀏覽器的2tab中均發送請求,(因為是同一表單,所以顯示均為2條記錄)


在第一個tab中點擊刪除,在第二個tab中點擊添加,則會報錯。

原因第一個tab中刪除時,會取得原表單(2條記錄),和頁面記錄一致,綁定不會出錯,之後對列表刪除一條記錄,則此時表單只有1條記錄。

            第二個tab中添加時,同樣取得原表單(1條記錄),但此時頁面有2條記錄,所以綁定時第2條記錄會出現越界錯誤。


 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值