Работа с пользовательскими типами значений в мета-виджете
Представьте себе следующую форму / боб:
public class MyForm {
private BankAccountNumber accountNumber;
// getter + setter
}
где BankAccountNumber
это объект пользовательского значения.
Когда я использую metawidget и jsf с экземпляром этого класса, поле ввода для accountNumber
свойство (отображается только метка).
Проблема в том, что мета-виджет не знает BankAccountNumber
типа и не знаю, что за UIInput
должен быть использован.
Единственное решение, которое я нашел, - это аннотировать мою собственность @UiAttribute(name = "type", value = "java.lang.String")
и иметь javax.faces.Converter
зарегистрирован для BankAccountNumber
учебный класс. Таким образом, metawidget генерирует HtmlnputText
,
Это лучшее решение?
Я думаю, что я мог бы также зарегистрировать свой собственный InspectionResultProcessor
изменить BankAccountNumber
в String
везде, но я даже не знаю, отображается ли мой пользовательский тип на String
это правильный способ сделать это в первую очередь.
1 ответ
Рекомендуемый подход - зарегистрировать свой собственный WidgetBuilder
сопоставить по атрибуту type
из BankAccountNumber
и верните соответствующий виджет. Вы можете вернуться null
для всех остальных type
и полагаться на использование CompositeWidgetBuilder
чтобы процесс создания виджета "провалился" до обычного HtmlWidgetBuilder
для большинства типов.
Какого рода UIInput
вы возвращаетесь для типа BankAccountNumber
зависит от тебя. Но если вы используете HtmlInputText
тогда вам, вероятно, потребуется зарегистрировать JSF-конвертеры обычным способом (этот бит не относится к Metawidget), чтобы JSF знал, как конвертировать из HtmlInputText
в BankAccountNumber
,
Для примера регистрации кастома WidgetBuilder
(и сочетая его с CompositeWidgetBuilder
), см. разделы 2.4.4 и 2.4.5 Руководства пользователя: http://metawidget.org/doc/reference/en/html/ch02s04.html