我有一個帶有 Vaadin 的 Spring Boot 應用程式,我只需要簡單的 UI 元素驗證而無需支持 bean。例如,只需檢查文本欄位值是否為空、是否為空。
由于驗證器需要一個 bean,我正在考慮使用 Junit Assert 來完成這項簡單的作業。因此,使用 Junit 不僅用于運行測驗,還用于應用程式的主要流程。
這是一種好的做法嗎?還有哪些替代方法?
uj5u.com熱心網友回復:
對于需要將 Vaadin 的轉換器或驗證器系結到單個欄位/值對而不涉及 Bean 的此類用例,我撰寫了 FieldBinder實用程式類,它可以在 Vaadin 的目錄中找到并作為 maven 依賴項添加到您的專案中。
https://vaadin.com/directory/component/fieldbinder
// Binder with integer
FieldBinder<Integer> integerFieldBinder = new FieldBinder<>();
TextField integerField = new TextField("Input number");
// Text field with Integer value Converter and Validator
// Demoing how to detect if value is valid and how to get it from FieldBinding
FieldBinding<Integer> integerBinding = integerFieldBinder.forField(integerField)
.withConverter(new StringToIntegerConverter("This is not a number"))
.withValidator(new IntegerRangeValidator("Give a number between 5 and 10",5,10))
.bind(integerValue);
uj5u.com熱心網友回復:
這是好習慣嗎
我不認為junit是為了在生產代碼中使用
我只需要簡單的 UI 元素驗證而無需支持 bean。有什么選擇
我相信您仍然可以使用系結 API,只需忽略 getter/setter:
new Binder<>().forField(new TextField())
.withValidator(...)
.bind(o -> null, (o, o2) -> {});
uj5u.com熱心網友回復:
雖然需要一個“bean”,但Binder它不必是完全抽出的東西。您還可以bind使用兩個函式(a
ValueProvider和 a Setter)。有了這個,你基本上可以使用任何你喜歡的容器作為“bean”。例如 aMap或 an AtomicInteger(你必須有辦法從中讀取一個值并寫回一個值)。
def tf = new TextField("Answer to all questions of the universe").tap {
setWidthFull()
}
def binder = new Binder<Map>().tap{
forField(tf)
.asRequired("A value is mandatory")
.withNullRepresentation("")
.withConverter(new StringToIntegerConverter("Only numbers are allowed"))
.withValidator(new IntegerRangeValidator("Must be 42", 42, 42))
.bind( // XXX
{ m -> m.value },
{ m, v -> m.value = v }
)
setBean([:])
}
add(tf)
add(new Button("Save", {
Notification.show(binder.valid ? "Saved ${binder.bean}" : "Please fix the errors first")
}))
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/485906.html
