Опция 1: Преобразуване на клиентски идентификатор
Тук предполагам, че ID полето на клиентския клас се нарича id
и че е от тип Long
. Това ви позволява да получите достъп до това ID поле чрез конвертор, който произвежда представяне на неформатиран низ. Обърнете внимание, че това не обработва добре стойността null
.
binder.forField(fkCustomerId)
.withConverter(Long::valueOf, String::valueOf)
.bind("customerId.id");
Опция 2: Преобразуване на клиентски обект
Този пример ще вземе обект Customer и ще го преобразува в желания формат за полето за ID на клиента. Това ви позволява да обработвате null
стойности и да извършвате по-разширено форматиране въз основа на състоянието на целия обект.
binder.forField(fkCustomerId)
.withConverter(new CustomerToCustomerIdConverter())
.bind(Mail::getCustomerId, Mail::setCustomerId);
Можете да пропуснете convertToModel
result в преобразувателя, защото не трябва да създавате клиентски обекти от ID стойности, въведени от потребителя.
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