我正在使用Spring MVC 2.5和我的模型/ bean類,此刻,我使用服務器端驗證。我想要做的驗證之一是檢查一些輸入是否不是數字(0-9)。用戶可以輸入非數字字符,如「abcd」而不是「1234」。Spring MVC屬性/字段綁定異常
我有一個@Pattern
它只接受積極BigDecimal(它代表美元金額)。
public class OfferSettingBean implements Serializable {
private static final String NUMBER_WITH_DECIMAL_PLACES_ONLY="^\\d+([.]\\d+)?$";
//org.hibernate.validator.pattern
@Pattern(regex = NUMBER_WITH_DECIMAL_PLACES_ONLY, message = "invalid.amount")
private BigDecimal offerSize;
//the rest of the code goes here including setter and getter methods
}
jsp頁面
<input type="text" name="offerSize" id="offerSize" value="${offerSetting.offerSize}" placeholder="$" />
我的代碼的問題是,如果用戶輸入類似「asdfsd」它並不甚至達到它應該檢查花樣點非數字字符。
Failed to convert property value of type [java.lang.String] to required type [java.math.BigDecimal] for property offerSize; nested exception is java.lang.NumberFormatException
我認爲問題是在檢查模式之前,它將字符串值綁定到BigDecimal,從而導致它失敗。
一個不好的解決方案可能是在offerSize setter方法中,我可以檢查即將到來的值,如果它不是數字,可以執行一些操作。但我不喜歡那個。
什麼是處理這種綁定問題的更好方法?
僅供參考:我知道我將在後面進行客戶端驗證(使用JQuery)。現在,我假設用戶通過某種方式傳遞客戶端驗證。
我希望擁有該模式的原因是在所有輸入字符都經過驗證的中心位置。所以我不必檢查它是否是否定的,無論是否包含數字或不包含數字。第二個是可能的,但正如你所說,它可能是壞的。對於後面的問題,系統已經在10年前設計好了,所以我們只需要使用BigDecimal – WowBow