【问题标题】:How to order collection columns in Apache isis?如何在 Apache isis 中排序集合列?
【发布时间】:2016-10-29 15:14:57
【问题描述】:

我使用 apache ISIS 已经快一年了,它是一个很棒的 框架。我正在尝试提高生成的用户界面的可用性,并且我正在寻找一种方法来对屏幕上显示的集合的列进行排序。

我找不到使用 @Collection@CollectionLayout 对列进行排序的方法,并且如果在 布局中可能,我也找不到示例。 xml 文件。

如果集合中最相关的列首先显示在表格的左侧-,那将真正提高我的用户界面的可用性。

(我在集合属性中显示的域实体通常有一个定义公共字段的超类。使用 layout.xml 和引导布局可以完美地显示单个实体的属性,但我仍在寻找类似的集合构造在用户界面中显示为表格。我在文档或高级指南中找不到任何提示)。

感谢任何提示,我可以如何控制显示域实体集合的表中列的顺序并提高用户界面的可用性。

【问题讨论】:

    标签: isis


    【解决方案1】:

    很高兴知道您喜欢使用该框架。

    使用注释的方法是使用@MemberOrder,而不是@CollectionLayout

    但是,如果您有一个 layout.xml 文件,那么这个(应该)覆盖 @MemberOrder 注释。在这种情况下,列的顺序与layout.xml 中的属性顺序相同。

    您还可以使用<collection id="xxx" hidden="ALL_TABLES">(或@CollectionLayout(hidden=Where.ALL_TABLES))隐藏您不想显示为列的属性。

    话虽如此,我最近确实发现了我认为是一个错误(在1.13.0 上):layout.xml 似乎被忽略了收集顺序,即使用于对象形式。这是不一致的,我还没有深入了解它。我的解决方法是重新添加 @MemberOrder 注释;这成功了。

    另一个警告:如果您有一个复杂的选项卡和常规字段集的组合,那么您会发现选项卡中的这些属性被认为是第一个,即使在它之前的字段集中有一个属性。这可以说是一个错误,但它是实现的一个症状:代码在字段集之前对选项卡组/选项卡进行了深度遍历。

    最后,这里有一个技巧。您可以做的是在要在列中显示的实体上定义一堆派生属性,并进行配置,以便仅在表格中显示这些属性,并以对象形式隐藏,例如:

    public class Customer {
        @Getter @Setter private String name;
        public String getNameAsColumn() { return getName(); }
    }
    

    然后在layout.xml:

    <property id="name" hidden="ALL_TABLES"/>
    <property id="nameAsColumn hidden="OBJECT_FORMS">
        <named>Name</named>
    </property>
    

    HTH 丹

    【讨论】:

    • 谢谢丹。这成功了。提示如何使用 @PropertyLayout(hidden = Where.ALL_TABLES) 隐藏所有集合中的属性以及使用派生属性的方法使我的用户界面更加圆润。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-03-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-01-30
    • 2017-08-14
    相关资源
    最近更新 更多