在 metawidget 中使用自定义值类型

Working with custom value types in metawidget

想象一下 form/bean:

public class MyForm {

    private BankAccountNumber accountNumber;

    // getter + setter
}

其中 BankAccountNumber 是自定义值对象。

当我将 metawidget 和 jsf 与此 class 的实例一起使用时,没有为 accountNumber 属性 生成输入字段(仅显示标签)。

问题是 metawidget 不知道 BankAccountNumber 类型,也不知道应该使用哪种 UIInput

到目前为止我找到的唯一解决方案是用 @UiAttribute(name = "type", value = "java.lang.String") 注释我的 属性 并为 BankAccountNumber class 注册一个 javax.faces.Converter。 这样,metawidget 会生成一个 HtmlnputText.

这是最好的解决方案吗?

我想我也可以注册我自己的 InspectionResultProcessor 以将 BankAccountNumber 更改为 String 但我什至不知道是否将我的自定义类型映射到 String首先是正确的方法。

推荐的方法是注册您自己的 WidgetBuilder 以匹配 BankAccountNumber 的属性 type 和 return 适当的小部件。您可以 return null 每隔 type,并依靠使用 CompositeWidgetBuilder 将小部件构建过程 'fall through' 转换为常规 HtmlWidgetBuilder对于大多数类型。

您 return 属于哪种 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