我试图了解 Wicket LoadableDetachable 模型是如何工作的。我从 Wicket 文档中了解到的情况是在正常情况下,当请求完成处理时,wicket 将自动序列化具有关联模型值的所有组件。这会消耗更多的内存。如果我们在序列化时使用 LoadableDetachable 模型,则模型值将不会被序列化。这是正确的吗?. 所以它会自动分离模型对象。那么对于下一个请求,模型值会自动重新加载吗?请参阅我的以下代码。
public class ProductListPanel extends Column<Product> {
@SpringBean
private ProductService productService;
private List productList;
public ProductListPanel(String id) {
super(id);
class ProductModel extends LoadableDetachableModel {
@Override
public void detach() {
// TODO Auto-generated method stub
productList = null;
System.out.print("Called Detach Object\n");
}
@Override
protected Object load() {
// TODO Auto-generated method stub
productList = productService.findAll();
System.out.print("Called Get Object\n");
return productList;
}
}
System.out.print("Before creating also calling\n");
final ProductModel productModel = new ProductModel();
ListView view = new ListView("list", productModel) {
protected void populateItem(ListItem item) {
System.out.print("\nBefore start also calling\n");
System.out.print("Before this one is callling \n");
Product result = (Product) item.getModelObject();
item.add(new Label("code", result.getCode()));
item.add(new Label("name", result.getName()));
final Link deleteLink = new Link("remove", item.getModel()) {
@Override
public void onClick() {
Product product = (Product) getModelObject();
productService.delete(product);
}
};
item.add(deleteLink);
}
};
add(view);
Link addProductLink = new Link("addProduct") {
@Override
public void onClick() {
// TODO Auto-generated method stub
setResponsePage(new AddProduct());
}
};
add(addProductLink);
productModel.detach();
}
}
在上面的代码中,我列出了数据库中的所有产品。我有每个产品的删除链接,当我们单击该链接时,我正在从数据库中删除产品。单击删除链接后,页面未刷新意味着它仍然显示已删除的产品。如果我添加这一行 productModel.detach(); 然后它工作正常。我的问题是为什么我必须调用 productModel.detach(); 手动?LoadableDetachableModel 假设自动做对吗?
请帮我