2

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

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

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

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

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

4

1 回答 1

3

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

使用注释执行此操作的方法是使用@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丹

于 2016-10-29T07:14:57.903 回答