菜鸟Java学习记录:使用Struts2的s:checkboxlist复选框标签遇到的坑

使用Struts2复选框标签的缘由

作为一个计算机大四的菜狗,最近使用SSH框架开发一个在线考试系统,其中有一个功能是题库的录入和编辑。为了数据回显的方便自然就选择了使用Struts2的UI标签库。在编辑多选题的时候使用了<s:checkboxlist/>标签,多选题答案的数据回显只能回显一个选项,其他答案不能回显。具体情况和解决办法下面说明
菜鸟Java学习记录:使用Struts2的s:checkboxlist复选框标签遇到的坑

点击编辑操作后进入题目详情,可以看到只有一个答案A被选中
菜鸟Java学习记录:使用Struts2的s:checkboxlist复选框标签遇到的坑

下面来看一下我的Action和JSP

1.先看我的Action
在多选题这个实体类中有一个String类型的属性StandardAnswer用于存储多选题答案,且每个答案用“,”隔开。为了数据回显的方便,将StandardAnswer以“,”分割然后转换为List。
菜鸟Java学习记录:使用Struts2的s:checkboxlist复选框标签遇到的坑
2.再看看我的JSP
照理说这样写是完全没有问题的,但是数据回显的时候就会出问题。
菜鸟Java学习记录:使用Struts2的s:checkboxlist复选框标签遇到的坑
3.解决方案—修改我的Action
原来的Action和控制台输出。我的妈呀突然发现List中每个元素的间距怪怪的。
菜鸟Java学习记录:使用Struts2的s:checkboxlist复选框标签遇到的坑
修改后的Action和控制台输出
菜鸟Java学习记录:使用Struts2的s:checkboxlist复选框标签遇到的坑
此时的数据回显正确了,为什么呢?菜鸟Java学习记录:使用Struts2的s:checkboxlist复选框标签遇到的坑
4.原因
在添加多选题的时候,同样也使用了<s:checkboxlist/>这个标签,提交表单的时候,会将选中的选项以“逗号”+“ 空格”的方式组成一个String的类型的值,写到<s:checkboxlist/>标签name属性设定的变量值中(我的libraryMultiChoice已在值栈中)。但在数据回显的时候,我们的List中的元素不能有空格,否则将只会回显第一个答案。折腾了两个小时终于把这个问题解决,菜鸟也是会慢慢进步的。

菜鸟Java学习记录:使用Struts2的s:checkboxlist复选框标签遇到的坑