2010-03-01 46 views
7

我有一個運行在weblogic上的j2ee應用程序。我對我的多盒子感到困惑。無法取消全部在Struts Multibox中

我所知道的multibox的是,檢查的項目將作爲提交的字符串數組傳遞。

我不知道爲什麼在我的應用程序中工作正常,當我取消選中複選框或更多,只要單個框保持選中狀態,但當我取消選中所有內容時,提交的數組就是之前選中的多框的數組它應該是空的。

你能幫助我嗎?

回答

14

您是否熟悉ActionForm類的reset()方法?

此方法的生活目的是重置複選框。如果您的表單中有一個選中的複選框,並且您提交了該複選框,則該複選框將根據請求提供。如果取消選中該複選框,則不會發送任何請求(GET提交是觀察此行爲的簡單方法)。

當Struts執行請求綁定時,它按名稱將請求中的參數與表單中的參數進行匹配。也就是說,如果有什麼要匹配的話。

現在考慮下列步驟操作:

  • 我對ActionForm的一個布爾字段;
  • 我也有一個匹配的複選框的形式;
  • 我提交表單=> Struts綁定請求,所以現在我的屬性在ActionForm中是真的;
  • 我取消選中表單中的複選框並再次提交=>沒有發送任何請求的複選框=> Struts沒有任何綁定=>您的字段在ActionForm上保持爲真;

上面的內容適用於多個複選框,但是您會得到一個數組而不是一個值。

輸入reset()方法。這在綁定請求之前由Struts調用。在這裏,您可以將字段值設置爲false。如果它到達請求中,Struts將用true => OK替換它。如果它沒有到達請求(因爲它未被選中),該值將保持爲false =>再次確定。

多盒子也是如此。您必須通過將數組減少到零長度來重置ActionForm中的值列表(但不爲空)。

如果您的ActionForm具有請求範圍,它通常無關緊要,因爲該對象是在每個請求時重新創建的。但是對於帶有複選框的會話範圍的ActionForm,reset()是必須的。