Работа с пользовательскими типами значений в мета-виджете

Представьте себе следующую форму / боб:

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

Другие вопросы по тегам