博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
【解决】关于Struts2 Checkbox标签回填的办法
阅读量:3034 次
发布时间:2019-05-15

本文共 2879 字,大约阅读时间需要 9 分钟。

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代码,

Html代码
  1. <inputtype="checkbox"name="name"value="name"checked="checked"id="name"/>
  2. <inputtype="hidden"id="__checkbox_name"name="__checkbox_name"value="name"/>
  3. <labelfor="name"class="checkboxLabel">测试</label>

JSP中的代码如下:

Jsp代码
  1. <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属性):

Jsp代码
  1. <s:checkboxlabel="测试2"name="name"value="false"/>

编译后的HTML:

Html代码
  1. <inputtype="checkbox"name="name"value="true"id="name"/>
  2. <inputtype="hidden"id="__checkbox_name"name="__checkbox_name"value="true"/>
  3. <labelfor="name"class="checkboxLabel">测试2</label>

页面上的显示的“测试2” 复选框未被选中!(请大家复制代码试验,至于value值为true,我未试过接收,有兴趣的朋友可以试试,告诉我。)

情景二:

JSP中的代码 (有fieldValue属性 且name在ValueStack中有值):

Jsp代码
  1. <s:checkboxlabel="测试2"name="name"value="false"fieldValue="name"/>

编译后的HTML:

Html代码
  1. <inputtype="checkbox"name="name"value="name"id="name"/>
  2. <inputtype="hidden"id="__checkbox_name"name="__checkbox_name"value="name"/>
  3. <labelfor="name"class="checkboxLabel">测试2</label>

测试2 仍然未被选中!

情景三:

JSP中的代码:

Jsp代码
  1. <s:checkboxlabel="测试2"name="name"value="true"/>

编译后的HTML:

Html代码
  1. <inputtype="checkbox"name="name"value="true"checked="checked"id="name"/>
  2. <inputtype="hidden"id="__checkbox_name"name="__checkbox_name"value="true"/>
  3. <labelfor="name"class="checkboxLabel">测试2</label>

测试2被选中了。。。但你会发现,生成的HTML中,value属性的值为true。这样就没有意义了。

情景四:

JSP中的代码:

Jsp代码
  1. <s:checkboxlabel="测试2"name="name"value="true"fieldValue="%{name}"/><!--OGNL表达式用%{}区别-->

编译后的HTML:

Html代码
  1. <inputtype="checkbox"name="name"value="aaa"checked="checked"id="name"/>
  2. <inputtype="hidden"id="__checkbox_name"name="__checkbox_name"value="aaa"/>
  3. <labelfor="name"class="checkboxLabel">测试2</label>

测试2被选中,且生成的HTML代码中value属性值回填了。

所以,value和fieldValue两个属性通常是一块使用的。且为了让其默认选中,我们可以使用Struts的if标签,具体代码如下:

Jsp代码
  1. <s:iftest="%{name=='aaa'}"><s:checkboxlabel="测试1"name="name"value="true"fieldValue="%{name}"/></s:if>
  2. <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

转载地址:http://irjic.baihongyu.com/

你可能感兴趣的文章
js弹出遮罩层
查看>>
Linux tar打包命令
查看>>
iOS中的UIView动画
查看>>
解决android textview 混合文字、数字换行后对列不齐
查看>>
Winform PPT切换图片效果
查看>>
ionic调用数据接口(post、解决 payload 问题)
查看>>
奇偶数分离
查看>>
1020 PAT
查看>>
hdu6080(最小环)
查看>>
背景透明,文字不透明解决办法
查看>>
微信小程序 报错: Expecting 'EOF','}',',',']', got INVALID
查看>>
mysql 数据库【目录】
查看>>
开发工具IDEA环境安装配置
查看>>
调查管理系统 -(7)设计调查选项处理&Answer实体的分析设计&开发的经验技巧&数据库使用等...
查看>>
python3正则表达式详细用法示例
查看>>
算法笔记_086:蓝桥杯练习 9-2 文本加密(Java)
查看>>
Win8下使用Ctrl加空格来切换输入法
查看>>
ajax分页
查看>>
Java 常量池理解与总结(转摘)
查看>>
多线程编程学习笔记——线程池(三)
查看>>