这更像是一个逻辑问题。我在网页上有一个复选框,我将其值从servlet请求参数存储在一个布尔对象(Java)中。逻辑是,如果复选框的请求参数不为null,则使对象为true,否则为null。再次调用页面时,如果其存储值为true,则将复选框标记为“已选中”。
this.checkbox = (servlet.getParameter("checkbox")!=null && servlet.getParameter("checkbox").contentEquals("on"))?true:null;
当我持有该复选框对象时,问题就开始了。我首先使用持久化数据填充页面,然后使用servlet值填充它。如果复选框值在数据库中存储为true,并且用户在页面上取消选中它并提交它,因为复选框的servlet参数变为null,我无法使复选框为null。因此,复选框始终显示持久值,因为它永远不会被覆盖。所以有人可以建议我如何填充对象值的逻辑变化?
答案 0 :(得分:17)
唯一有效的复选框测试是查看getParameter()
是否返回null
。
如果返回值为null
,则取消选中,否则会进行检查。
请注意,如果您希望在首页演示文稿中选中该复选框,则应该存在checked
属性,如果您想要取消选中该复选框,则不应该存在该属性。参数值应始终为checked
,如下例所示。
<label>
<input
type="checkbox"
id="cb_id"
name="cb_id"
value="cb_id_value"
checked="checked"
/>
My label
</label>
对于此示例,您可以在servlet处理代码中使用此逻辑:
HTTPServetRequest request = ...;
boolean cbState = request.getParameter( "cb_id" ) != null;
请注意,如果用户在上面的示例getParameter
中选中了复选框,则会返回"cb_id_value"
,但由于您通常只有一个带有专用名称的复选框,因此您无需检查价值。
顺便说一下,我在你的例子中注意到你正在使用servlet
到getParameter
。我希望在你的系统中它是HTTPServletRequest
的绰号。
答案 1 :(得分:0)
听起来你可能没有持久化复选框字段的值,或者你在处理空值时遇到了一些困惑,导致字段始终显示为已检查。
尝试确保数据库字段始终包含有效的布尔值,方法是将字段设置为不允许空值并具有适当的默认值。
提交表单时,如果选中该复选框,则应将数据库值更新为true
,否则为false
。
在显示表单时,仅当数据库值为true
时,才应在标记中包含“checked”属性。