Список базы данных содержит неправильные объекты
Цель:
Создать базу данных с документацией о драйверах. Идея состоит в том, чтобы создать записи о поставщике и протоколе и связать их следующим образом: внутри формы создания протокола я хотел бы выбрать, какой поставщик поддерживает этот протокол.
Подход:
Я использовал Create your own!
Кнопка для создания следующих 2 Applications
:
- Вендоры
- протоколы
На странице создания протокола я положил Database List
поле. Со следующими свойствами:
- Имя = продавцы
- Тип дисплея = выбрать
- Множественный выбор = ложь
- запрос гибернации: я оставил это поле пустым.
- Имя класса xwiki = VendorsCode.VendorsClass
- Имя поля идентификатора = имя документа
- Имя поля значения: я оставил это поле пустым.
Проблема:
К моему удивлению это работает, но не полностью. Когда я открываю форму для добавления протокола, в раскрывающемся списке поставщиков теперь есть не только поставщики, но и пара других объектов, таких как: "Blog.BlogIntroduction"
, Очевидно, я не хочу этого в списке. Почему это там, и как я могу получить это?
Я пытался добавить значение doc.name
в value field name
коробка также. Но это только усугубляет ситуацию. Теперь список содержит только "Blog.BlogIntroduction".
Обратите внимание, что это чистая свежая установка xwiki. В этой базе нет ничего особенного.
1 ответ
Что здесь происходит?
То, что вы видите, является значением по умолчанию для элемента выбора в списке базы данных, поскольку оно хранится на странице шаблона для объектов "Протокол".
Новый список баз данных инициализируется, чтобы показать список сообщений в блоге, имея значение по умолчанию: Blog.BlogPostClass
для "имени класса XWiki". (Вы можете попробовать это, создав новый Database List
поле в шаге 2 и откройте окно редактирования этого поля; просто удалите его после того, как вы закончите.) Для новой установленной вики есть два сообщения в блоге: "шаблон страницы блога" в Blog.BlogPageTemplate
и вступление в блоге в Blog.BlogIntroduction
, Именно эти два пункта показаны изначально.
После того, как вы заполните значение вашего класса в поле "Имя класса XWiki", у XWiki есть шанс найти фактический список возможных значений. Однако он сохраняет выбранное "значение по умолчанию" с первой попытки (хотя это не имеет смысла).
Это похоже на ошибку, по крайней мере, из опыта пользователя.
Как это исправить
Первый шаг. Причина, по которой ваш список содержит только фиктивное "значение по умолчанию", может заключаться в том, что указанный вами класс не существует. Из того, что я вижу на скриншоте, имя класса выглядит хорошо для меня, но тогда это поле не допускает никаких опечаток, даже что-то вроде пробела перед именем класса. Если имя не подходит точно, оно дает (почти) пустой список.
Если вы не можете заставить его работать с именем класса и хотите пойти по HQL-маршруту, используйте для поля HQL
, BaseObject as obj where doc.fullName = obj.name
and obj.className = 'VendorCode.VendorClass'
and doc.fullName != 'VendorCode.VendorTemplate'
а также doc.fullName
оба как id
а также value
поле. Это дает дополнительное преимущество, заключающееся в том, что поставщик шаблонов недоступен в выпадающем списке только "реальных" объектов.
После того, как вам удалось исправить имя класса, вы должны увидеть список всех объектов вендора (включая VendorCode.VendorTemplate
, если вы не пошли по маршруту HQL), а оставшиеся поддельные значения по умолчанию. Теперь вы можете перейти к следующему шагу:
Второй шаг: если вам удалось исправить имя класса, вы увидите своих поставщиков в раскрывающемся списке рядом со значением по умолчанию; теперь пришло время избавиться от фиктивного значения по умолчанию. Для этого перейдите к объекту шаблона приложения; например
- перейдите по ссылке "Редактировать приложение" на стартовой странице приложения "Протокол"
- затем посмотрите на поле с тремя флажками под определениями полей; самый верхний из флажков говорит "Обновить шаблон класса"
- эта часть содержит ссылку на то, что называется "ProtocolTemplate".
- нажмите на ссылку, и вы окажетесь на странице шаблона
- на странице шаблона нажмите "Изменить" и выберите другое значение в раскрывающемся списке поставщиков, а затем нажмите "Сохранить".
Значение "BlogSomething" должно быть исключено из выбора поставщиков.
Необязательный шаг (не отвечая на вопрос, но в любом случае может представлять интерес)
Если вы предпочитаете, чтобы значение, предварительно не выбранное в шаблоне, вообще не имело значения, вам нужно выполнить еще несколько шагов:
- в редакторе приложения отредактируйте поле и выберите "множественный выбор" и отобразите тип "флажок"
- перейдите к "следующему шагу" в редакторе, затем вернитесь к редактированию поля с "предыдущим шагом"
- снимите флажок рядом с выбранной записью поставщика, затем откройте редактор полей и установите "тип отображения" обратно на флажок и снимите флажок "множественный выбор".
- перейти на "следующий шаг" и "закончить"
Впоследствии, если вы создаете новую запись "протокол", предварительно выбирается пустой "поставщик".