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();
}
}
上記のコードでは、DB からすべての製品をリストしています。各製品のリンクを削除しています。そのリンクをクリックすると、DBから製品が削除されます。[削除] リンクをクリックした後、ページが更新されず、削除された製品がまだ表示されていることを意味します。この行を追加すると、productModel.detach(); その後、正常に動作しています。ここでの私の質問は、productModel.detach(); を呼び出さなければならない理由です。手動?LoadableDetachableModel が自動的に実行されると仮定しますか?
私を助けてください