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代码,
-
<inputtype="checkbox"name="name"value="name"checked="checked"id="name"/>
-
<inputtype="hidden"id="__checkbox_name"name="__checkbox_name"value="name"/>
-
<labelfor="name"class="checkboxLabel">测试</label>
JSP中的代码如下:
-
<s:checkboxlabel="测试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:checkboxlabel="测试2"name="name"value="false"/>
编译后的HTML:
-
<inputtype="checkbox"name="name"value="true"id="name"/>
-
<inputtype="hidden"id="__checkbox_name"name="__checkbox_name"value="true"/>
-
<labelfor="name"class="checkboxLabel">测试2</label>
页面上的显示的“测试2” 复选框未被选中!(请大家复制代码试验,至于value值为true,我未试过接收,有兴趣的朋友可以试试,告诉我。)
情景二:
JSP中的代码 (有fieldValue属性 且name在ValueStack中有值):
-
<s:checkboxlabel="测试2"name="name"value="false"fieldValue="name"/>
编译后的HTML:
-
<inputtype="checkbox"name="name"value="name"id="name"/>
-
<inputtype="hidden"id="__checkbox_name"name="__checkbox_name"value="name"/>
-
<labelfor="name"class="checkboxLabel">测试2</label>
测试2 仍然未被选中!
情景三:
JSP中的代码:
-
<s:checkboxlabel="测试2"name="name"value="true"/>
编译后的HTML:
-
<inputtype="checkbox"name="name"value="true"checked="checked"id="name"/>
-
<inputtype="hidden"id="__checkbox_name"name="__checkbox_name"value="true"/>
-
<labelfor="name"class="checkboxLabel">测试2</label>
测试2被选中了。。。但你会发现,生成的HTML中,value属性的值为true。这样就没有意义了。
情景四:
JSP中的代码:
-
<s:checkboxlabel="测试2"name="name"value="true"fieldValue="%{name}"/><!--OGNL表达式用%{}区别-->
编译后的HTML:
-
<inputtype="checkbox"name="name"value="aaa"checked="checked"id="name"/>
-
<inputtype="hidden"id="__checkbox_name"name="__checkbox_name"value="aaa"/>
-
<labelfor="name"class="checkboxLabel">测试2</label>
测试2被选中,且生成的HTML代码中value属性值回填了。
所以,value和fieldValue两个属性通常是一块使用的。且为了让其默认选中,我们可以使用Struts的if标签,具体代码如下:
-
<s:iftest="%{name=='aaa'}"><s:checkboxlabel="测试1"name="name"value="true"fieldValue="%{name}"/></s:if>
-
<s:else><s:checkboxlabel="测试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
分享到:
相关推荐
struts的htmlcheckbox标签的默认选中问题
工程文件 博文链接:https://selvemen.iteye.com/blog/453223
freemarker初探 附 freemarker中文手册 与 struts2 checkboxlist的研究 入门适用!
(原创)struts标签之checkboxlist选中值并换行处理
巧用struts标签之checkboxlist选中默认值换行处理
重写 代码如下: //解决checkboxgroup回填数据问题 Ext.override(Ext.form.BasicForm,{ findField : function(id){ var field = this.items.get(id); if(!field){ this.items.each(function(f){ if(f.isXType(...
NULL 博文链接:https://zxymicky.iteye.com/blog/1536476
<%@ taglib uri="/struts-tags" prefix="s" %> 结合例子,重点掌握以下标签的用法 (1) (2) (3) <s:if> 、、 (4) (5) (6) 、 (7) 、、<s:checkbox>、 (8) 、、<s:checkboxlist>
NULL 博文链接:https://simle-google.iteye.com/blog/586373
html:radio,html:checkbox,html:multibox,html:select 与actionform结合使用数组或集合,有多种实现方式
在Struts中几种情况可以使标签初始就是选中的,Formbean里面该Property的值设为 1.on 、2.yes 、3.true 这三种情况都是可以实现默认选中的。 注:如果不选中,最好把Property的设置为””,因为在Action中得到...
NULL 博文链接:https://xueyue.iteye.com/blog/1158510
Struts 2 标签库(文档手册) Tags-API-CLSW-JSP <%@ taglib prefix="s" uri="/struts-tags" %> 就能使用struts2.0的标签库 下面就介绍每个标签的具体应用实例说明:按字母排列 A: 1. 2. <s:a href=""></s:a>-...
关键代码都在里面 资源是工程中的一部分 暂不能运行 原来用的是Java实现Json串 考虑到频繁访问数据库 就改成了存储过程
2.配置struts.xml文件; 3.掌握在视图中访问Action的方法. 4. 掌握在视图中多方法调用同一个Action的方法 5.掌握常用标签textfield、radio、paaaword、checkboxlist、select、data的使用方法,实现页面与Action的交互...
要在JSP中使用Struts 2.0标志,先要指明标志的引入。通过在JSP的代码的顶部加入以下代码可以做到这点。 <%@taglib prefix="s" uri="/struts-tags" %>
一个WinForm的TreeView,某node的CheckBox初始状态为false,当双击这个node的checkbox时,会出现很奇怪的情况: 第一次双击checkbox,checkbox显示的状态会切换两次状态,unchecked-> checked-> unchecked,而...
实现struts2标签chekboxlist竖排; 可以实现checkboslist横向放置个数(自行修改)