2011-07-24 100 views
7

這更多的是一個邏輯問題。我在網頁上有一個複選框,我將它的值從servlet請求參數存儲在一個布爾對象(Java)中。邏輯是,如果複選框的請求參數不爲null,則使該對象爲真,否則爲空。當頁面被再次調用時,如果它的存儲值爲真,則將該複選框標記爲「已檢查」。如何設置/從servlet動態獲取複選框的值

this.checkbox = (servlet.getParameter("checkbox")!=null && servlet.getParameter("checkbox").contentEquals("on"))?true:null; 

當我堅持這個複選框對象時,問題就開始了。我首先用持久數據填充頁面,然後用servlet值填充它。如果複選框的值在數據庫中存儲爲true,並且用戶在頁面上取消選中並提交它,由於複選框的servlet參數變爲null,我無法將複選框設置爲空。所以複選框總是顯示持久值,因爲它永遠不會被覆蓋。那麼任何人都可以在我如何填充對象值時提出一些邏輯上的改變?

+2

布爾變量應該是true或false,不是true或null。 –

回答

17

複選框的唯一有效測試是查看getParameter()是否返回null或不。

如果返回值是null它未被選中,否則會被檢查。

請注意,如果您希望在首頁演示文稿中選中該複選框,並且根本不應出現checked屬性,並且該複選框應該不存在。參數值應始終爲checked,如下例所示。

<label> 
    <input 
    type="checkbox" 
    id="cb_id" 
    name="cb_id" 
    value="cb_id_value" 
    checked="checked" 
    /> 
    My label 
</label> 

在這個例子中,你可能有這樣的邏輯在servlet處理代碼:

HTTPServetRequest request = ...; 

boolean cbState = request.getParameter("cb_id") != null; 

請注意,如果該複選框被用戶在上面的例子檢查getParameter將返回"cb_id_value",但因爲您通常只有一個帶有專用名稱的複選框,所以您不必檢查該值。

順便說一句,我注意到在你的例子中,你正在使用servletgetParameter。我希望在你的系統中它是一個名字HTTPServletRequest

+0

您是通過名稱還是通過ID檢索參數?另外,爲什麼不能使用''request.getParameterValues(..)''? –

0

這聽起來像你可能不會持久化複選框字段的值,或者在處理空值時導致字段始終顯示爲選中狀態時出現混淆。

嘗試確保您的數據庫字段始終包含有效的布爾值,方法是將該字段設置爲不允許空值並具有適當的默認值。

提交表單時,如果選中該複選框,則應將數據庫值更新爲true;否則,應將false更新爲true

在顯示錶格時,只有當數據庫值爲true時,您才應該在標籤中包含「checked」屬性。

相關問題