Mã nguồn của Wicket được viết rất tốt và tự giải thích. Label
đang sử dụng getDefaultModelObjectAsString()
từ Component
mà trông như thế này:
// Get converter
final Class<?> objectClass = modelObject.getClass();
final IConverter converter = getConverter(objectClass);
// Model string from property
final String modelString = converter.convertToString(modelObject, getLocale());
Vì vậy, ở đây bạn có thể thấy rằng Wicket sử dụng một IConverter
để chuyển đổi đối tượng mô hình để một String
. Nhìn vào việc thực hiện mặc định ConverterLocator
bạn sẽ thấy rằng nếu bạn chưa đăng ký bất kỳ IConverter
cho loại đối tượng này, Wicket sẽ sử dụng DefaultConverter
sử dụng phương thức tĩnh org.apache.wicket.util.lang.Objects
để chuyển đổi đối tượng thành String
.
TextField
cũng sử dụng IConverter
để chuyển đổi đối tượng thành String
và từ String
thành đối tượng một lần nữa. Sự khác biệt là Wicket có thể luôn luôn chuyển đổi một lớp chưa biết thành một String
bằng cách sử dụng phương thức toString
, nhưng không phải theo cách khác. Vì vậy, nếu bạn muốn sử dụng số IModel<Person>
với số TextField
, bạn cần phải đăng ký triển khai IConverter<Person>
của riêng mình.
Tại sao bạn không thử? – bert