???? Struts2自帶著許多標簽,控制和數據部分的使用較多,UI部分的標簽其實用得并不多,但實然用到了,有時可能會讓你措手不及,就拿Checkbox標簽的回填來說。
?
??? Struts2對Checkbox標簽的描述如下:
Description
Renders an HTML input element of type checkbox, populated by the specified property from the ValueStack.
?
??? 生成一個類型為checkbox的HTML input 元素,顯示值棧中一個指定的屬性。(本人英語一般,若翻譯不當,請見諒
)
?
??? 從以上的意見得知,Checkbox標簽在頁面編譯后,會自動轉成對應的HTML代碼,
?
<input type="checkbox" name="name" value="name" checked="checked" id="name"/> <input type="hidden" id="__checkbox_name" name="__checkbox_name" value="name" /> <label for="name" class="checkboxLabel">測試</label>
??? JSP中的代碼如下:
<s:checkbox label="測試2" name="name" value="false" fieldValue="name" />
??? 大家會發現編譯后的HTML代碼除了產生一個checkbox類型的input元素,同時也產生對應的一個隱藏域元素,對于這個隱藏域的作用,還未研究。(這次主要講回填的,先忽略)
?
??? 重點:在Checkbox這個標簽中,有兩個關鍵的屬性(value 和 fieldValue) ,先來看看Struts2給出的官方文檔說明。
?
?? value :Preset the value of input element. (事先調整input元素的值)
?
?? fieldValue : The actual HTML value attribute of the checkbox(checkbox真實的HTML 屬性值)
?
? 從以上的解釋來看,Struts2 Checkbox這個標簽的特別之處在于 value值并不是真正代表這個復選框的屬性,而???? fieldValue值才是真正的屬性值。
?
? 情景一:
??? JSP中的代碼(無fieldValue屬性):
<s:checkbox label="測試2" name="name" value="false" />
??? 編譯后的HTML:
<input type="checkbox" name="name" value="true" id="name"/> <input type="hidden" id="__checkbox_name" name="__checkbox_name" value="true" /> <label for="name" class="checkboxLabel">測試2</label>
??? 頁面上的顯示的“測試2” 復選框未被選中!(請大家復制代碼試驗,至于value值為true,我未試過接收,有興趣的朋友可以試試,告訴我。)
?
? 情景二:
???? JSP中的代碼 (有fieldValue屬性 且name在ValueStack中有值):
<s:checkbox label="測試2" name="name" value="false" fieldValue="name" />
????編譯后的HTML:
?
<input type="checkbox" name="name" value="name" id="name"/> <input type="hidden" id="__checkbox_name" name="__checkbox_name" value="name" /> <label for="name" class="checkboxLabel">測試2</label>
?
? 測試2 仍然未被選中!
?
?
? 情景三:
?
??? JSP中的代碼:
<s:checkbox label="測試2" name="name" value="true" />
??? 編譯后的HTML:
<input type="checkbox" name="name" value="true" checked="checked" id="name"/> <input type="hidden" id="__checkbox_name" name="__checkbox_name" value="true" /> <label for="name" class="checkboxLabel">測試2</label>
??? 測試2被選中了。。。但你會發現,生成的HTML中,value屬性的值為true。這樣就沒有意義了。
?
? 情景四:
?
? ? JSP中的代碼:?
<s:checkbox label="測試2" name="name" value="true" fieldValue="%{name}" /><!--OGNL表達式 用%{}區別-->
??? 編譯后的HTML:
<input type="checkbox" name="name" value="aaa" checked="checked" id="name"/> <input type="hidden" id="__checkbox_name" name="__checkbox_name" value="aaa" /> <label for="name" class="checkboxLabel">測試2</label>
??? 測試2被選中,且生成的HTML代碼中value屬性值回填了。
?
?? 所以, value和fieldValue兩個屬性通常是一塊使用的 。且為了讓其默認選中,我們可以使用Struts的if標簽,具體代碼如下:
<s:if test="%{name=='aaa'}"><s:checkbox label="測試1" name="name" value="true" fieldValue="%{name}" /></s:if> <s:else><s:checkbox label="測試2" name="name" value="false" fieldValue="bbb"/></s:else>
補充:根據value屬性中的值(true or false)判斷是否選中,所以也可以使用三目運算符,
例如:1=1?'true':'false',或者是 1=1?'1:0 (非0的都表示真,0表示假) ;
? ? 實現回填的方式還有其他的,大家也可以搜索一下,如使用JavaScript,這里我就不重復說明了。
?? 個人總結,Struts2 checkbox適用的場景為“是、否;有、無;符合、不符合;男、女”等這樣的情況;如果選擇的項目較多,應該使用checkboxlist標簽為佳!
?
??? 備注:Struts2版本為2.2.1
更多文章、技術交流、商務合作、聯系博主
微信掃碼或搜索:z360901061

微信掃一掃加我為好友
QQ號聯系: 360901061
您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。
【本文對您有幫助就好】元
