如何动态地从servlet设置/获取复选框的值

时间:2011-07-24 10:07:21

标签: java servlets checkboxlist

这更像是一个逻辑问题。我在网页上有一个复选框,我将其值从servlet请求参数存储在一个布尔对象(Java)中。逻辑是,如果复选框的请求参数不为null,则使对象为true,否则为null。再次调用页面时,如果其存储值为true,则将复选框标记为“已选中”。

this.checkbox = (servlet.getParameter("checkbox")!=null && servlet.getParameter("checkbox").contentEquals("on"))?true:null;

当我持有该复选框对象时,问题就开始了。我首先使用持久化数据填充页面,然后使用servlet值填充它。如果复选框值在数据库中存储为true,并且用户在页面上取消选中它并提交它,因为复选框的servlet参数变为null,我无法使复选框为null。因此,复选框始终显示持久值,因为它永远不会被覆盖。所以有人可以建议我如何填充对象值的逻辑变化?

2 个答案:

答案 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",但由于您通常只有一个带有专用名称的复选框,因此您无需检查价值。

顺便说一下,我在你的例子中注意到你正在使用servletgetParameter。我希望在你的系统中它是HTTPServletRequest的绰号。

答案 1 :(得分:0)

听起来你可能没有持久化复选框字段的值,或者你在处理空值时遇到了一些困惑,导致字段始终显示为已检查。

尝试确保数据库字段始终包含有效的布尔值,方法是将字段设置为不允许空值并具有适当的默认值。

提交表单时,如果选中该复选框,则应将数据库值更新为true,否则为false

在显示表单时,仅当数据库值为true时,才应在标记中包含“checked”属性。