Кастомизация PropertyFilter в Generic Filter проблема с "просачиванием" валидатора в EntityComboBox в GenericFilter

Jmix version: 2.5.2
Jmix Studio Plugin Version: 2.5.2-243
IntelliJ version: OpenIDE 2024.3.5

Добрый день!
При использовании PropertyFilter в XML конфигурациях Generic Filter для полей с Сущностями в JMIX используется EntityPicker, который не удобен, если значений в справочнике мало, в этих случаях лучше использовать EntityComboBox.

В XML конфигурации фильтра можно для propertyFilter переопределить использующийся компонент например:

<genericFilter id="genericFilter"
                   dataLoader="tasksDl">
  <properties include=".*"/>
  <configurations>
    <configuration id="defaultTaskGFConfig" default="true">
      <propertyFilter property="category" operation="EQUAL">
        <entityComboBox id="taskCategoryComboBox" dataContainer="tasksDc" property="category" required="false">
          <itemsQuery class="com.company.testgfcustom.entity.TaskCategory" escapeValueForLike="true"
                      searchStringFormat="(?i)%${inputString}%">
            <fetchPlan extends="_base"/>
            <query>
              <![CDATA[select e from TaskCategory e where e.name like :searchString escape '\' order by e.name]]>
            </query>
          </itemsQuery>
          <actions>
            <action id="entityClear" type="entity_clear"/>
          </actions>
        </entityComboBox>
      </propertyFilter>
    </configuration>
  </configurations>
</genericFilter>

В этом случае вместо EntityPicker будет использоваться EntityComboBox. Но есть проблема, которая заключается в том, что к этому EntityComboBox применяются валидаторы, например если Task.category помечен как mandatory то в фильтре он будет invalid, даже если везде проставить required="false", т.е. атрибут required в XML просто игнорируется.

gf-pf-req

На мой взгляд это ошибка, нормальным поведением было бы убирать валидатор required в GenericFilter.

Есть ли способ обойти такое поведение?

Проблема решается легко, не надо в entityComboBox указывать property и dataContainer, надо просто указать metaClass:

<propertyFilter property="category" operation="EQUAL" >
  <entityComboBox metaClass="TaskCategory">
    <itemsQuery class="com.company.testgfcustom.entity.TaskCategory" escapeValueForLike="true"
                searchStringFormat="(?i)%${inputString}%">
      <fetchPlan extends="_base"/>
      <query>
        <![CDATA[select e from TaskCategory e where e.name like :searchString escape '\' order by e.name]]>
      </query>
    </itemsQuery>
  </entityComboBox>
</propertyFilter>

Еще один способ глобально определить использующийся компонент на весь тип - это свойство jmix.ui.component.entity-field-fqn

jmix.ui.component.entity-field-fqn.TaskCategory = io.jmix.flowui.component.combobox.EntityComboBox
1 симпатия