如何在Apache isis中订购集合列?

时间:2016-10-27 14:10:15

标签: isis

我使用 apache ISIS 将近一年,它是一个伟大的框架。我正在尝试提高生成的用户界面的可用性,我正在寻找一种方法来订购屏幕上显示的集合列。

我找不到使用 @Collection @CollectionLayout 订购列的方法,如果可以在布局中找不到示例。 xml 文件。

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

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

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

1 个答案:

答案 0 :(得分: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 丹