Java Tapestry5网格组件网中的转换器功能
今天我有一个关于Tapestry5网格中数字格式的问题。 我在组件中有两个字段需要格式化,因为一些规则涉及小数点和千位分隔符。对于文本字段,我使用为整个应用程序定义的translator(如示例中所示),但我不知道如何为网格获得相同的功能(或者即使可能)。我希望在整个应用程序中为所有网格提供相同的机制 当然,并不是所有的数字网格字段都是货币,所以应该有某种可能性来配置它们 我知道有了网格,我可以使用ValueEncoder,但我认为在这种情况下这不起作用,因为它编码网格中显示的整个对象,而不仅仅是一些定义的字段Java Tapestry5网格组件网中的转换器功能,java,tapestry,Java,Tapestry,今天我有一个关于Tapestry5网格中数字格式的问题。 我在组件中有两个字段需要格式化,因为一些规则涉及小数点和千位分隔符。对于文本字段,我使用为整个应用程序定义的translator(如示例中所示),但我不知道如何为网格获得相同的功能(或者即使可能)。我希望在整个应用程序中为所有网格提供相同的机制 当然,并不是所有的数字网格字段都是货币,所以应该有某种可能性来配置它们 我知道有了网格,我可以使用ValueEncoder,但我认为在这种情况下这不起作用,因为它编码网格中显示的整个对象,而不仅仅
还有一件事:我知道我可以定义每个字段以从方法中获取值,并且可以实现所有功能,但我正在寻找更灵活的方法—如前面提到的文本字段的“translator”。您可以通过定义名为xCell的块属性(其中x是列名)来覆盖默认网格单元渲染行为。提供了一个自定义lastName列呈现的示例
<t:grid source="users" row="user">
<p:lastNameCell>
<t:pagelink page="user/view" context="user.id">${user.lastname}</t:pagelink>
</p:lastNameCell>
</t:grid>
${user.lastname}
通过定义名为xCell的块特性(其中x是列名),可以覆盖默认网格单元渲染行为。提供了一个自定义lastName列呈现的示例
<t:grid source="users" row="user">
<p:lastNameCell>
<t:pagelink page="user/view" context="user.id">${user.lastname}</t:pagelink>
</p:lastNameCell>
</t:grid>
${user.lastname}
这可以通过几件事的结合来实现
Jumpstart示例这可以通过以下几项组合完成
Jumpstart示例感谢您的回答,但该解决方案的问题是,我需要在每个网格中为列重复代码,并且我希望在一个地方编写,并且只在整个应用程序中传播。感谢您的回答,但该解决方案的问题是,我需要在每个网格中为列重复代码,我想在一个地方写,只在整个应用程序中传播。您可能可以使用DataTypeAnalyzer可以查找的字段上的注释来驱动数据类型。例如@DecimalFormat(“#,###0.00”)嗯,我不知道我是否理解正确:DataTypeAnalyzer应该寻找某种注释?好吧,同时我用另一种方式来做:我已经编写了自己的DataTypeAnalyzer(与AnnotationDataTypeAnalyzer非常类似),这也开始工作。不过也谢谢你的提示:)哦,太酷了。。。我不知道@DataType注释。如果在bean上使用这些注释,则不需要自定义DataTypeAnalyzer。只需使用@DataType(“4decimalplaces”)等,就可以了。我没有仔细阅读AnnotationDataTypeAnalyzer文档,您是对的,这就是我所需要的全部-谢谢:)您可能可以使用DataTypeAnalyzer可以查找的字段上的注释来驱动数据类型。例如@DecimalFormat(“#,###0.00”)嗯,我不知道我是否理解正确:DataTypeAnalyzer应该寻找某种注释?好吧,同时我用另一种方式来做:我已经编写了自己的DataTypeAnalyzer(与AnnotationDataTypeAnalyzer非常类似),这也开始工作。不过也谢谢你的提示:)哦,太酷了。。。我不知道@DataType注释。如果在bean上使用这些注释,则不需要自定义DataTypeAnalyzer。只需使用@DataType(“4decimalplaces”)等,就可以了。我没有仔细阅读AnnotationDataTypeAnalyzer文档,您是对的,这就是我所需要的一切-谢谢:)