Речь же про Jmix 1.5, верно?
Возможности указать колонку, в которую будет помещёт динамический атрибут, из коробки нет.
Размещение атрибута происходит в методе io.jmix.dynattrui.impl.FormEmbeddingStrategy#addAttributeComponent
protected void addAttributeComponent(Form form, AttributeDefinition attribute) {
String code = DynAttrUtils.getPropertyFromAttributeCode(attribute.getCode());
ValueSource<?> valueSource = form.getValueSourceProvider().getValueSource(code);
ComponentGenerationContext context = new ComponentGenerationContext(getEntityMetaClass(form), code);
context.setValueSource(valueSource);
Component resultComponent = uiComponentsGenerator.generate(context);
form.add(resultComponent);
setWidth(form, resultComponent, attribute);
}
Видно, что там явно атрибут помещается в первую колонку формы: form.add(resultComponent);
.
В качестве ворэкраунда можете у себя в проекте переопределить бин, который добавляет атрибуты на форму, и прописать нужное вам поведение. Например, можно анализировать код динамического атрибута и из него вычислять колонку, куда его поместить.
@Component
public class MyFormEmbeddingStrategy extends FormEmbeddingStrategy {
@Override
protected void addAttributeComponent(Form form, AttributeDefinition attribute) {
String code = DynAttrUtils.getPropertyFromAttributeCode(attribute.getCode());
ValueSource<?> valueSource = form.getValueSourceProvider().getValueSource(code);
ComponentGenerationContext context = new ComponentGenerationContext(getEntityMetaClass(form), code);
context.setValueSource(valueSource);
io.jmix.ui.component.Component resultComponent = uiComponentsGenerator.generate(context);
if (attribute.getCode().endsWith("col2")) {
form.add(resultComponent, 1);
} else {
form.add(resultComponent);
}
setWidth(form, resultComponent, attribute);
}
}
Коробочный бин при этом нужно отключить в application.properties
jmix.core.exclude-beans=dynat_FormEmbeddingStrategy