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

Posted

技术标签:

【中文标题】如何从 servlet 动态设置/获取复选框的值【英文标题】:How to set/get values of checkboxes from a servlet dynamically 【发布时间】:2011-10-11 23:31:51 【问题描述】:

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

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

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

【问题讨论】:

布尔变量应该是真或假,而不是真或空。 【参考方案1】:

对复选框的唯一有效测试是查看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 的绰号。

【讨论】:

【参考方案2】:

听起来您可能没有保留复选框字段的更改值,或者您在处理空值时遇到了一些混乱,导致该字段始终显示为选中状态。

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

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

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

【讨论】:

以上是关于如何从 servlet 动态设置/获取复选框的值的主要内容,如果未能解决你的问题,请参考以下文章

如何在php中获取多个选定(动态)复选框的值?

jsp中如何获取servlet的值?

点击超链接时跳转到一个servlet,怎样在servlet中获得checkbox的值

如何使用角度js根据数据库中的值设置复选框的选中属性

如何从控制器获取 1-20 个复选框的值?

从 Servlet 获取复选框值