1

我猜我可能在这里遗漏了一些简单的东西,但我已经做了很多搜索并且没有找到答案......

概括

我如何使用支持 JavaBeans 的现成库来帮助我从 HTML 表单中获取一个复选框并使用它来填充 JavaBean 中的布尔字段,然后该字段将用于更新数据库表?如果这不起作用,那么最好的方法是什么?最终,我试图避免使用在所有其他方面都是通用代码的领域特定代码。

描述

  1. 我有一个显示表单的 jsp 文件 (addScreen.jsp)。

  2. 我想使用输入到表单中的数据来填充 JavaBean(类型 Screens)。

  3. 然后,我将使用 JavaBean(通过 Hibernate)更新数据库表中的记录。

  4. 数据库表 (Screens) 包含一个列 enabledFlag,它具有布尔类型。

  5. 我在 html 表单中表示它的方式是一个复选框。

  6. 在我的控制器代码中,当我处理表单时,我想使用提供的优雅和通用的功能来支持 JavaBeans。

  7. 所以我试图使用 BeanUtils.populate() 方法从 HTML 表单中获取数据并使用它来填充screentype 的字段Screens

  8. 这种方法适用于大部分字段,screen并将表单中的数据转换为正确的类型,并将其存储在屏幕 JavaBean 中。

  9. 但是(这就是问题所在)处理复选框并创建一个真或假值以进入ScreensJavaBean 中的布尔字段。事实上,它总是让该字段填充false. 我猜它什么也没做,默认为假。

  10. 我想我可以明白为什么这与我所做的完全不同(但请随时纠正我)。复选框状态记录在 HttpServletRequest 参数中的方式可能不会反映 BeanUtils.populate() 的预期,因此它不能做任何有用的事情。但我不确定它在期待什么,所以我不知道如何操作输入以便 populate() 给出正确的答案(不确定这是否很清楚)。

因此,鉴于上述情况,我的问题是:

  1. 我正在尝试做的事情有什么根本错误吗?即使用 BeanUtils 或其他通用 JavaBean 库从包含复选框的 HTML 表单中填充 JavaBean?如果是这样,请让我知道实现目标的更好方法。

  2. 假设我正在尝试做的事情没有根本问题,我是否使用了错误的方法或方法,或者我应该在调用 populate() 之前以某种方式操作数据,以便它正确解释复选框?

  3. 关于如何解决这个问题的任何其他提示?

我试图在下面包含一些相关代码,而不会让读者陷入不相关的细节,但如果有帮助,请随时询问以了解更多信息。欢迎所有反馈。

代码片段

来自 addScreen.jsp 的表单,其中包括 enabledFlag 复选框

<form id="editScreen" method="post" action='Controller.do'>
    <table>
        <col class='label' />
        <tr>
            <td>
                <label>Screen Name:</label>
            </td>
            <td>
                <input type='text' name='name'>
            </td>
        </tr>
        <tr>
            <td>
                <label>Enabled?:</label>
            </td>
            <td>
                <input type="checkbox" name="enabledFlag" value="Enabled" checked>
            </td>
        </tr>
        <tr><td>
            <input type='submit' name='addButton' value='Add'>
        </td></tr>
    </table>
</form>

Screens JavaBean 中启用标志的声明

private boolean enabledFlag;

@Column(name = "EnabledFlag", nullable = true, insertable = true, updatable = true, length = 0, precision = 0)
@Basic
public boolean isEnabledFlag() {
    return enabledFlag;
}

public void setEnabledFlag(boolean enabledFlag) {
    this.enabledFlag = enabledFlag;
}

调用 BeanUtils.populate()

BeanUtils.populate(data, request.getParameterMap());

data是类型Screens并且requestHttpServletRequest包含表单数据的。

4

1 回答 1

0

只是一个猜测 - 你的标志的值是“启用”,尝试像“真”,“开”或“1”。

或者您是否有将“启用”映射为真的映射代码?

此外,当复选框未选中时似乎存在问题,因为在这种情况下,没有任何内容发送到服务器 - 使用 Javascript 将隐藏字段设置为值“on”或“off”似乎有一个常见的解决方案" 并仅考虑隐藏字段,而忽略复选框本身。

请参阅此处以获取更多参考: http: //books.google.de/books ?id=KNjkjBDEKssC&lpg=PT107&ots=9wZRkd_Y48&pg=PT107#v=onepage&q&f=false

于 2013-12-19T00:39:42.827 回答