如何在 Apache isis 中对集合列进行排序?

How to order collection columns in Apache isis?

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

我找不到使用 @Collection@CollectionLayout 对列进行排序的方法,也找不到示例可能在 layout.xml 文件中。

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

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

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

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

使用注释执行此操作的方法是使用 @MemberOrder,而不是 @CollectionLayout

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

中属性的顺序相同

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

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

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

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

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 旦