【解决】关于Struts2 Checkbox标签回填的办法

系统 1451 0

     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

【解决】关于Struts2 Checkbox标签回填的办法


更多文章、技术交流、商务合作、联系博主

微信扫码或搜索:z360901061

微信扫一扫加我为好友

QQ号联系: 360901061

您的支持是博主写作最大的动力,如果您喜欢我的文章,感觉我的文章对您有帮助,请用微信扫描下面二维码支持博主2元、5元、10元、20元等您想捐的金额吧,狠狠点击下面给点支持吧,站长非常感激您!手机微信长按不能支付解决办法:请将微信支付二维码保存到相册,切换到微信,然后点击微信右上角扫一扫功能,选择支付二维码完成支付。

【本文对您有帮助就好】

您的支持是博主写作最大的动力,如果您喜欢我的文章,感觉我的文章对您有帮助,请用微信扫描上面二维码支持博主2元、5元、10元、自定义金额等您想捐的金额吧,站长会非常 感谢您的哦!!!

发表我的评论
最新评论 总共0条评论