我猜我可能会遗漏一些简单的东西,但我已经做了很多搜索而没有找到答案......
如何使用支持JavaBeans的现成库来帮助我从HTML表单中获取一个复选框,并使用它来填充JavaBean中的布尔字段,然后将其用于更新数据库表?如果这不起作用,哪种方法最好?最终,我试图避免在通用代码的所有其他方面编写特定于字段的代码。
我有一个显示表单的jsp文件(addScreen.jsp)。
我想使用输入到表单中的数据来填充JavaBean(键入Screens)。
然后我将使用JavaBean(通过Hibernate)更新数据库表中的记录。
数据库表(Screens)包含一列enabledFlag,它有一个布尔类型。
我在html表单中表示的方式是一个复选框。
在我的控制器代码中,当我处理表单时,我想使用提供的优雅和通用功能来支持JavaBeans。
因此,我尝试使用BeanUtils.populate()方法从HTML表单中获取数据,并使用它来填充screen
类型的Screens
字段。
这种方法适用于screen
中的大多数字段,并将表单中的数据转换为正确的类型,并将其存储在屏幕JavaBean中。
但是(这是问题)它不处理复选框并创建一个true或false值进入其中的Boolean字段Screens
JavaBean。事实上,它总是留下填充false
的字段。我猜它没有做任何事情,它默认为假。
我想我可以理解为什么这不能完全像我做的那样(但随意纠正我)。复选框状态记录在HttpServletRequest参数中的方式可能不会反映BeanUtils.populate()所期望的内容,因此它无法做任何有用的事情。但我不确定它的期望是什么,所以我不知道如何操作输入,以便populate()给出正确的答案(不确定是否非常清楚)。
我尝试做的事情是否存在根本性的错误 - 即使用BeanUtils或其他通用JavaBean库从包含复选框的HTML表单填充JavaBean?如果是这样,请让我知道实现目标的更好方法。
假设我尝试做的事情没有根本问题,我使用错误的方法或方法,还是应该在调用populate()之前以某种方式操作数据,以便它解释复选框是否正确?
关于如何解决这个问题的其他任何提示?
我试图在下面加入一些相关的代码,而不会让读者陷入无关紧要的细节,但是如果能有所帮助,请随时询问。欢迎所有反馈。
<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>
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(data, request.getParameterMap());
data
的类型为Screens
,request
是包含表单数据的HttpServletRequest
。
答案 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