Wicket 将行添加到refreshingView而不重新绘制整个refreshingView
我们设置了一个Wicket 将行添加到refreshingView而不重新绘制整个refreshingView,wicket,Wicket,我们设置了一个refreshingView(包含在边框内),在refreshing视图之外,我们有一个ajaxLink,它将一个新的shirt对象添加到支持refreshingView的列表中。refreshingView包含文本字段和下拉列表,用户可以在其中输入有关衬衫的信息 在ajaxLink中,我们将衬衫添加到列表中,然后将整个边框添加到ajaxLink的目标,从而刷新边框。当您添加一行并填写信息(衬衫颜色、尺寸、样式等)并添加另一件衬衫时,就会出现问题。添加了新衬衫的另一行,但同时丢失了
refreshingView
(包含在边框内),在refreshing视图之外,我们有一个ajaxLink,它将一个新的shirt对象添加到支持refreshingView的列表中。refreshingView包含文本字段和下拉列表,用户可以在其中输入有关衬衫的信息
在ajaxLink中,我们将衬衫添加到列表中,然后将整个边框添加到ajaxLink的目标,从而刷新边框。当您添加一行并填写信息(衬衫颜色、尺寸、样式等)并添加另一件衬衫时,就会出现问题。添加了新衬衫的另一行,但同时丢失了输入的关于第一件衬衫的所有信息
关于如何保留以前输入的衬衫的信息,有什么想法吗 以前的数据丢失,因为每次渲染后,refreshingView都会丢弃所有项目(以及包含数据的模型) 您可以设置ItemReuseStategy:
refreshingView.setItemReuseStrategy(new ReuseIfModelsEqualStrategy());
另一种更复杂的方法是只重新绘制新添加的行。请参见此处的答案:与其每次通过
new ReuseIfModelsEqualStrategy()
创建strategy类的新实例,不如使用ReuseIfModelsEqualStrategy.getInstance()
,以便在应用程序曾经使用的所有RefreshingView对象之间共享同一实例。当然,ReuseIfModelQualstStrategy是不可变的和线程安全的,所以使用共享实例没有问题。