簡體   English   中英

如何使用BeanUtils.populate從具有復選框的表單填充Bean

[英]How do I use BeanUtils.populate to populate a bean from a form which has a checkbox

我想我可能在這里錯過了一些簡單的東西,但是我做了很多搜索,卻沒有找到答案...

摘要

如何使用支持JavaBeans的現成庫來幫助我從HTML表單中獲取復選框,並使用它來填充JavaBean中的布爾字段,然后將其用於更新數據庫表? 如果這行不通,哪種方法最好? 最終,我試圖避免在其他所有方面都編寫通用代碼。

描述

  1. 我有一個顯示表單的jsp文件(addScreen.jsp)。

  2. 我想使用輸入到表單中的數據來填充JavaBean(類型為Screens)。

  3. 然后,我將使用JavaBean(通過Hibernate)來更新數據庫表中的記錄。

  4. 數據庫表(屏幕)包含一列enabledFlag,它具有布爾類型。

  5. 我用html表單表示的方式是復選框。

  6. 在我的控制器代碼中,當我處理表單時,我想使用提供的優雅和通用功能來支持JavaBeans。

  7. 因此,我嘗試使用BeanUtils.populate()方法從HTML表單中獲取數據,並使用其填充Screens類型的screen字段。

  8. 這種方法對於screen大多數字段都非常有效,並將表單中的數據轉換為正確的類型並將其存儲在屏幕JavaBean中。

  9. 但是(這是問題所在)不會處理復選框並創建true或false值以進入Screens JavaBean中的Boolean字段。 實際上,它總是使該字段充滿false 我猜它什么也不做,它默認為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());

dataScreens類型,而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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM