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

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