Apache ISIS: порядок столбцов в объекте домена — @MemberOrder не работает

У меня есть следующая проблема: я хочу упорядочить столбцы DomainObject, чтобы самая важная информация была первой, т.е. слева. Поэтому я использовал аннотацию @MemberOrder, но это не работает. У меня НЕТ layout.xml, поэтому параметры не перезаписываются.

Вот пример кода моего доменного объекта:

 @PersistenceCapable(identityType = IdentityType.DATASTORE, table = "jobs")
 @Extension(vendorName = "datanucleus", key = "datastore", value = "store-email")
 @Inheritance(strategy = InheritanceStrategy.NEW_TABLE)
 @DomainObjectLayout(cssClassFa = "envelope")
 public class EmailSend implements Comparable {

        @PrimaryKey(column = "email_id")
        @Persistent(primaryKey = "true", valueStrategy = IdGeneratorStrategy.IDENTITY, column = "email_id")
        @Property(editing=Editing.DISABLED)
        private int id;

        @Property(editing=Editing.DISABLED)
        @PropertyLayout(multiLine = 5)
        @Column(name = "text", length = 65535)
        @Title(sequence = "1")
        private String text;

        ...

        @MemberOrder(sequence = "1")
        public int getId() {
           return id;
        }

        @MemberOrder(sequence = "2")
        public String getText() {
           return text;
        }

        ...
 }

Там порядок столбцов случайный, поэтому @MemberOrder не работает. Где ошибка в моем коде?


person riedelinho    schedule 18.05.2017    source источник


Ответы (1)


Несколько вещей, которые я отметил.

  1. @Property применяется только к геттерам, а не к полям. Мы поддерживаем добавление этой аннотации в поля, но это для случая использования также с использованием Project Lombok (при этом Lombok «переместит» аннотацию в геттер. Таким образом, ваше свойство text, вероятно, отображается как редактируемое, даже если ваше намерение было вероятно, чтобы он был нередактируемым.

  2. Вам действительно следует использовать layout.xml, они сэкономят вам массу времени и позволят создавать гораздо более сложные макеты. Вы можете загрузить первоначальный с помощью миксина «downloadLayoutXml», предоставляемого фреймворком.

  3. На ваш вопрос: я на самом деле не уверен, почему здесь не соблюдается @MemberOrder - фрагмент кода мне кажется нормальным. Однако то, что вы, возможно, захотите сделать — и это в любом случае очень гибкий инструмент — это предоставить реализацию TableColumnOrderService в качестве способа точной настройки порядка (или даже полного исключения свойств в виде столбцов, даже в сквозном режиме, если это необходимо).

PS: если вы считаете, что с @MemberOrder действительно есть проблема, и хотите его использовать, поднимите вопрос вместе с тестовым приложением на github.

HTH Дэн

person Dan Haywood    schedule 19.05.2017