如何从 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"
,但由于您通常有一个具有专用名称的复选框,因此您不必检查值。
顺便说一句,我在您的示例中注意到您正在使用 servlet
到 getParameter
。我希望在您的系统中它是HTTPServletRequest
的绰号。
【讨论】:
【参考方案2】:听起来您可能没有保留复选框字段的更改值,或者您在处理空值时遇到了一些混乱,导致该字段始终显示为选中状态。
尝试确保您的数据库字段始终包含有效的布尔值,方法是将字段设置为不允许空值并具有适当的默认值。
提交表单时,如果选中复选框,则应将数据库值更新为true
,否则更新为false
。
在显示表单时,只有当数据库值为true
时,您才应在标记中包含“checked”属性。
【讨论】:
以上是关于如何从 servlet 动态设置/获取复选框的值的主要内容,如果未能解决你的问题,请参考以下文章