2012-04-12 33 views
5

Tôi muốn biết điều gì đó về các mô hình hỗ trợ wicket chung chung. Tôi hiểu mô hình, mô hình chống đỡ và mô hình hợp chất chống đỡ.Mô hình Wicket hoạt động như thế nào với chung?

Nhưng còn về lớp Mô hình thì sao? Có gì xảy ra nếu tôi làm điều này:

Label<Person> label = new Label<Person> ("someID", new Model<Person>()) 

gì sẽ được hiển thị trong nhãn đó? toString đầu ra?

Cho phép nói rằng tôi có cùng trong một TextField. Giá trị nào nó sẽ được thiết lập trong đối tượng đó?

+2

Tại sao bạn không thử? – bert

Trả lời

7

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.

+3

Vì vậy, để tổng hợp nó: nó sử dụng phương thức 'toString()'. Nếu bạn muốn một cái gì đó khác nhau, cung cấp công cụ chuyển đổi của riêng bạn. – biziclop

Các vấn đề liên quan