2011-07-24 60 views
7

这更多的是一个逻辑问题。我在网页上有一个复选框,我将它的值从servlet请求参数存储在一个布尔对象(Java)中。逻辑是,如果复选框的请求参数不为null,则使该对象为真,否则为空。当页面被再次调用时,如果它的存储值为真,则将该复选框标记为“已检查”。如何设置/从servlet动态获取复选框的值

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

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

+2

布尔变量应该是true或false,不是true或null。 –

回答

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

+0

您是通过名称还是通过ID检索参数?另外,为什么不能使用''request.getParameterValues(..)''? –

0

这听起来像你可能不会持久化复选框字段的值,或者在处理空值时导致字段始终显示为选中状态时出现混淆。

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

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

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

相关问题