2013-05-31 164 views
5

我遇到了這種情況。當複選框未被選中時,struts複選框標籤提交什麼值

class MyForm extends IdSelectionForm { 
    private Boolean approveIt = true; 
    ..... 
} 

我JSTL形式由

<html:checkbox property="approveIt" styleId="style1" value="true"/> 

當我選擇複選框,然後提交。在struts動作中,我爲此字段設置了真值。 再次當我取消選中並提交時。那麼我也會得到真正的價值。我想知道它是否具有默認值。如果我取消選中,它應該被錯誤覆蓋。

回答

5

首先,<html:checkbox>是Struts標籤而不是JSTL標籤。這個標籤只是生成一個類型複選框的標準HTML輸入。而HTML複選框在檢查時將它們的值作爲參數值發送,並且在未選中時不發送任何參數。

所以,既然你的表單字段的默認值是true:

  • 如果複選框被選中,它將被Struts的設置爲true
  • 如果該複選框未被選中,也不會由Struts設置爲任何值,並因此保持其默認值:true

approveIt屬性的默認值應該爲false。這樣,如果複選框未被選中,它將保持其默認值(false),這是正確的。如果複選框被選中,它將被設置爲true,這也是正確的。

2

value屬性包含標籤使用的值,並且與checkbox狀態沒有任何關係,如果它是checked或未選中。

在提交時,只有選中的複選框纔會通過。然後Struts捕獲它們並通過名稱bean屬性設置相應的值。

如果您每次初始化內聯值或構造函數中的值,那麼只有checked複選框將通過設置bean屬性值進行更新。您無法更新未經檢查的狀態。

因此,在填充表單之前不要設置任何值。如果該值未設置,則Struts將該值視爲false,並從標記中刪除checked。這通過明確地將值設置爲false來實現。

與值true但複選框相反的行爲還沒有像null而非true或對應於複選框checked或未經檢查的狀態(無checked屬性)false其它值的狀態。

2

我遇到了同樣的問題。 即使布爾變量初始化爲false後,問題仍然存在。

問題是我的範圍是session

將範圍更改爲request一切都按預期工作。

相關問題