Вариант 1. Преобразование идентификатора клиента
Здесь я предполагаю, что поле ID в классе Customer называется id
и имеет тип Long
. Это позволяет вам получить доступ к этому полю идентификатора через конвертер, который производит неформатированное строковое представление. Обратите внимание, что это не обрабатывает значение null
должным образом.
binder.forField(fkCustomerId)
.withConverter(Long::valueOf, String::valueOf)
.bind("customerId.id");
Вариант 2. Преобразование объекта клиента
В этом примере объект Customer будет преобразован в желаемый формат для поля идентификатора клиента. Это позволяет обрабатывать null
значений и выполнять более сложное форматирование в зависимости от состояния всего объекта.
binder.forField(fkCustomerId)
.withConverter(new CustomerToCustomerIdConverter())
.bind(Mail::getCustomerId, Mail::setCustomerId);
Вы можете опустить convertToModel
result в преобразователе, потому что вам не следует создавать объекты клиентов из значений идентификаторов, вводимых пользователем.
public class CustomerToCustomerIdConverter implements Converter<String, Customer> {
@Override
public Result<Customer> convertToModel(String s, ValueContext valueContext) {
return Result.error("not supported");
}
@Override
public String convertToPresentation(Customer customer, ValueContext valueContext) {
return Objects.toString(customer.getCustomerId(), "");
}
}
Стиль текстового поля
Чтобы настроить стиль TextField, вам необходимо установить его в режим только для чтения. А если вы вообще не хотите получать границу текстового поля, вам нужно добавить дополнительный стиль.
TextField fkCustomerId = new TextField();
fkCustomerId.addStyleName(ValoTheme.TEXTFIELD_BORDERLESS);
fkCustomerId.setReadOnly(true);
person
Mika
schedule
09.10.2017