想象一下以下表单/ bean:
public class MyForm {
private BankAccountNumber accountNumber;
// getter + setter
}
其中BankAccountNumber
是自定义值对象。
当我将metawidget和jsf与此类的实例一起使用时,不会为accountNumber
属性生成输入字段(仅显示标签)。
问题是metawidget不知道BankAccountNumber
类型,也不知道应该使用什么类型的UIInput
。
到目前为止,我找到的唯一解决方案是使用@UiAttribute(name = "type", value = "java.lang.String")
注释我的媒体资源,并为javax.faces.Converter
课程注册BankAccountNumber
。
这样,metawidget会生成HtmlnputText
。
这是最好的解决方案吗?
我想我也可以注册我自己的InspectionResultProcessor
将BankAccountNumber
更改为String
,但我甚至不知道是否将我的自定义类型映射到String
首先是正确的做法。
答案 0 :(得分:1)
建议的方法是注册您自己的WidgetBuilder
以匹配type
的属性BankAccountNumber
并返回相应的小部件。您可以为每个其他null
返回type
,并依赖于使用CompositeWidgetBuilder
让小部件构建过程“落实”#{1}}。大多数类型的常规HtmlWidgetBuilder
。
对于某种类型的UIInput
,您返回的BankAccountNumber
类型取决于您。但是如果您使用HtmlInputText
,那么您可能需要以通常的方式注册JSF转换器(这一点不是Metawidget特有的),以便JSF知道如何从{{1}转换进入HtmlInputText
。
有关注册自定义BankAccountNumber
(并将其与WidgetBuilder
合并)的示例,请参阅“用户指南”的第2.4.4节和第2.4.5节:http://metawidget.org/doc/reference/en/html/ch02s04.html