JSTL 答案是最好的答案,但是,就我而言,它是一个没有 JSTL 的旧 Java 遗留应用程序,我无法介绍它。
这是我对一些遗留 Struts 1.3 代码的要求。设置一个复选框以匹配来自数据库调用的表单 bean 的值,如“Y”、“N”、“”或 null。
我还必须保留在 struts 逻辑标签中,而不是使用 JSTL,这是我最初的偏好。我知道 struts文档
说复选框应该等同于 actionForm 中的布尔变量,但我使用了一个字符串值,它有效。
从上面的文档链接:
注意:与此字段关联的基础属性值应为布尔类型,并且您指定的任何值都应对应于指示真值(“true”、“yes”或“on”)的字符串之一。如果您希望使用一组相关的 String 值,请考虑使用 multibox 标签。
我曾考虑将我的字符串值转换为表单中的布尔值,但它以这种方式获取字符串。
最后,我使用了一些 javascript 来设置检查状态。所有这些都是冗长的,并不是最好的解决方案,但面对需求,它确实有效。
这是代码:
<logic:equal name="<%=formName%>" property="formInd" value="Y">
<html:checkbox name="<%=formName%>" onchange="setDataChanged()" property="formInd"/>
<script type="text/javascript" LANGUAGE="JavaScript">
document.<%=formName%>.formInd.checked = true;
</script>
</logic:equal>
<logic:equal name="<%=formName%>" property="formInd" value="N">
<html:checkbox name="<%=formName%>" onchange="setDataChanged()" property="formInd"/>
<script type="text/javascript" LANGUAGE="JavaScript">
document.<%=formName%>.formInd.checked = false;
</script>
</logic:equal>
<logic:empty name="<%=formName%>" property="formInd" >
<html:checkbox name="<%=formName%>" onchange="setDataChanged()" property="formInd"/>
<script type="text/javascript" LANGUAGE="JavaScript">
document.<%=formName%>.formInd.checked = false;
</script>
</logic:empty>