如何使用BeanUtils.populate从具有复选框的表单填充bean

时间:2013-07-03 17:35:38

标签: java forms jsp boolean javabeans

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

摘要

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

描述

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

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

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

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

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

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

  7. 因此,我尝试使用BeanUtils.populate()方法从HTML表单中获取数据,并使用它来填充screen类型的Screens字段。

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

  9. 但是(这是问题)处理复选框并创建一个true或false值进入其中的Boolean字段Screens JavaBean。事实上,它总是留下填充false的字段。我猜它没有做任何事情,它默认为假。

  10. 我想我可以理解为什么这不能完全像我做的那样(但随意纠正我)。复选框状态记录在HttpServletRequest参数中的方式可能不会反映BeanUtils.populate()所期望的内容,因此它无法做任何有用的事情。但我不确定它的期望是什么,所以我不知道如何操作输入,以便populate()给出正确的答案(不确定是否非常清楚)。

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

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

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

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

    4. 我试图在下面加入一些相关的代码,而不会让读者陷入无关紧要的细节,但是如果能有所帮助,请随时询问。欢迎所有反馈。

      Code Snippets

      来自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>
      

      屏幕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的类型为Screensrequest是包含表单数据的HttpServletRequest

1 个答案:

答案 0 :(得分:0)

只是一个猜测 - 你的旗帜的价值是&#34;启用&#34;,尝试类似&#34; true&#34;,&#34; on&#34;或&#34; 1&#34;。

或者你有映射代码映射&#34;启用&#34;真的吗?

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

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