![](/img/trans.png)
[英]How do I convert from String[] to ArrayList<String> using the BeanUtils.populate method?
[英]How do I use BeanUtils.populate to populate a bean from a form which has a checkbox
我想我可能在這里錯過了一些簡單的東西,但是我做了很多搜索,卻沒有找到答案...
如何使用支持JavaBeans的現成庫來幫助我從HTML表單中獲取復選框,並使用它來填充JavaBean中的布爾字段,然后將其用於更新數據庫表? 如果這行不通,哪種方法最好? 最終,我試圖避免在其他所有方面都編寫通用代碼。
我有一個顯示表單的jsp文件(addScreen.jsp)。
我想使用輸入到表單中的數據來填充JavaBean(類型為Screens)。
然后,我將使用JavaBean(通過Hibernate)來更新數據庫表中的記錄。
數據庫表(屏幕)包含一列enabledFlag,它具有布爾類型。
我用html表單表示的方式是復選框。
在我的控制器代碼中,當我處理表單時,我想使用提供的優雅和通用功能來支持JavaBeans。
因此,我嘗試使用BeanUtils.populate()方法從HTML表單中獲取數據,並使用其填充Screens
類型的screen
字段。
這種方法對於screen
大多數字段都非常有效,並將表單中的數據轉換為正確的類型並將其存儲在屏幕JavaBean中。
但是(這是問題所在)它不會處理復選框並創建true或false值以進入Screens
JavaBean中的Boolean字段。 實際上,它總是使該字段充滿false
。 我猜它什么也不做,它默認為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
。
只是一個猜測-您標志的值是“已啟用”,請嘗試使用“ true”,“ on”或“ 1”之類的值。
還是您有將“ Enabled”映射為true的映射代碼?
另外,當未選中此復選框時,似乎會出現問題,因為在這種情況下,沒有任何內容發送到服務器-使用Javascript將隱藏字段設置為“ on”或“ off”值似乎是一種常見的解決方案”,並且僅考慮隱藏字段,而忽略復選框本身。
請參閱此處以獲取更多參考: http : //books.google.de/books?id=KNjkjBDEKssC&lpg=PT107&ots=9wZRkd_Y48&pg=PT107#v=onepage&q&f=false
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.