Tapestry5网格组件中的转换器功能

时间:2015-01-22 09:43:01

标签: java tapestry

今天我将对Tapestry5网格中的格式化数字有疑问。 由于涉及十进制标记和千位分隔符的一些规则,我需要格式化Grid组件中的几个字段。对于文本字段我正在使用为整个应用程序定义的翻译器(例如在this示例中)但我不知道如何为网格获得相同的功能(或者即使它可能完全可用)。我希望有相同的功能我的整个应用程序中所有网格都可用的机制。

当然,并非所有数字网格字段都是货币,因此应该有某种可能性来配置它们。

我知道使用网格我可以使用ValueEncoder,但我认为在这种情况下这不起作用,因为它编码显示在网格中的整个对象,而不仅仅是一些已定义的字段。

还有一件事:我知道我可以定义每个字段以从方法中获取价值并且完成所有功能,但我正在寻找更灵活的东西 - 就像前面提到的“翻译器”一样,用于文本字段。

2 个答案:

答案 0 :(得分:2)

您可以通过定义名为xCell的块属性(其中x是列名)来覆盖默认的网格单元渲染行为。 documentation给出了自定义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>

答案 1 :(得分:2)

这可以通过几件事的组合来实现

  1. 一个DataTypeAnalyzer,它产生一个给定PropertyAdapter
  2. 的String数据类型
  3. 将数据类型映射到块的DisplayBlockContribution(另请参阅EditBlockContribution)。
  4. 将DisplayBlockContribution贡献给BeanBlockSource
  5. 请注意,这不仅会影响网格,还会影响所有基于bean的组件(例如BeanDisplay)。

    Jumpstart示例here