Выгружаю Transient List определенных сущностей, отображается их InstanceName, не срабатывает maxTextLength для данной колонки.
Данное свойство работает только для строки?
Разве в колонке не идёт преобразование к строке?
Добрый день, @gleb.gavrilenko!
Атрибут maxTextLength
работает только с колонками, которые содержат значения с Attribute type = DATATYPE
(Integer
, String
, Double
и тп.). С колонками, которые содержат значения, являющиеся ссылками на связанные сущности (Attribute type = ASSOCIATION
or COMPOSITION
), атрибут maxTextLength
не будет работать.
С уважением,
Глеб
Можете сделать собственную реализацию AbbreviatedCollectionFormatter
:
AbbreviatedCollectionFormatter
@SuppressWarnings("rawtypes")
@Component
public class AbbreviatedCollectionFormatter implements BiFunction<Collection, Integer, String> {
@Inject
protected MetadataTools metadataTools;
@SuppressWarnings("unchecked")
@Override
public String apply(Collection collection, Integer maxTextLength) {
if (collection == null) {
return StringUtils.EMPTY;
}
String value = (String) collection.stream()
.map(metadataTools::format)
.collect(Collectors.joining(", "));
if (value.length() > maxTextLength + MAX_TEXT_LENGTH_GAP) {
return StringUtils.abbreviate(value, maxTextLength);
} else {
return value;
}
}
}
- XML дескриптор (атрибут products - коллекция)
<groupTable id="ordersTable"
width="100%"
dataContainer="ordersDc">
<actions>
<action id="create" type="create"/>
<action id="edit" type="edit"/>
<action id="remove" type="remove"/>
</actions>
<columns>
<column id="number"/>
<column id="products"/>
</columns>
<rowsCount/>
<buttonsPanel id="buttonsPanel"
alwaysVisible="true">
<button id="createBtn" action="ordersTable.create"/>
<button id="editBtn" action="ordersTable.edit"/>
<button id="removeBtn" action="ordersTable.remove"/>
</buttonsPanel>
</groupTable>
- Контроллер экрана
@UiController("sample_Order.browse")
@UiDescriptor("order-browse.xml")
@LookupComponent("ordersTable")
@LoadDataBeforeShow
public class OrderBrowse extends StandardLookup<Order> {
@Inject
protected MetadataTools metadataTools;
@Inject
protected DynamicAttributesTools dynamicAttributesTools;
@Inject
protected AbbreviatedCollectionFormatter formatter;
@Inject
protected GroupTable<Order> ordersTable;
@Subscribe
protected void onBeforeShow(BeforeShowEvent event) {
AbbreviatedCellClickListener abbreviatedCellClickListener =
new AbbreviatedCellClickListener(ordersTable, dynamicAttributesTools, metadataTools);
Table.Column<?> column = ordersTable.getColumn("products");
column.setMaxTextLength(10);
column.addClickListener(clickEvent ->
abbreviatedCellClickListener.onClick(clickEvent.getItem(), clickEvent.getSource().getStringId()));
column.setFormatter(products ->
formatter.apply((Collection) products, column.getMaxTextLength()));
ordersTable.setStyleProvider((Order entity, String property) -> {
if ("products".equals(property)) {
int maxTextLength = column.getMaxTextLength();
String value = formatter.apply(entity.getProducts(), maxTextLength);
if (value != null && value.endsWith("...")) {
return "c-table-cell-textcut";
} else {
return "c-table-clickable-text";
}
}
return null;
});
}
}
С уважением,
Глеб
1 симпатия