Wicket-包裹式收集模型“;“转变”;
我有一个域对象,它有一组基本值,这些值表示另一个域对象(“Person”)的主键 我有一个Wicket组件,它接受IModel,并允许您查看、删除和向列表中添加人员 我想编写一个实现IModel的包装器,但它由来自原始域对象的PropertyModel支持 仅查看很简单(为了简洁起见,Scala语法): 但是我应该如何写这篇文章来允许从原始的long列表中添加和删除呢 或者模型不是进行这种翻译的最佳场所Wicket-包裹式收集模型“;“转变”;,wicket,Wicket,我有一个域对象,它有一组基本值,这些值表示另一个域对象(“Person”)的主键 我有一个Wicket组件,它接受IModel,并允许您查看、删除和向列表中添加人员 我想编写一个实现IModel的包装器,但它由来自原始域对象的PropertyModel支持 仅查看很简单(为了简洁起见,Scala语法): 但是我应该如何写这篇文章来允许从原始的long列表中添加和删除呢 或者模型不是进行这种翻译的最佳场所 谢谢 我不太清楚我是否理解你的问题,也不理解Scala的语法 但是,要从列表中删除一个实体,
谢谢 我不太清楚我是否理解你的问题,也不理解Scala的语法 但是,要从列表中删除一个实体,您可以提供一个链接,使用dao将其删除。您必须使用转发器来填充个人列表,以便每个转发器条目都有自己的模型,可以传递到删除链接 看看这个Wicket,它使用带有中继器的链接来选择联系人。你只需要修改它来删除你的人,而不是选择它
至于修改原始长列表,您可以使用
ListView.removeLink()
方法获取一个链接组件,该组件从备份列表中删除一个条目。您可以执行以下操作:
class PersonModel extends Model<List<Person>> {
private transient List<Person> cache;
private IModel<List<String>> idModel;
public PersonModel( IModel<List<String>> idModel ) {
this.idModel = idModel;
}
public List<Person> getObject() {
if ( cache == null ) {
cache = convertIdsToPersons( idModel.getObject() );
return cache;
}
public void setObject( List<Person> ob ) {
cache = null;
idModel.setObject( convertPersonsToIds( ob ) );
}
}
class PersonModel扩展了模型{
私有临时列表缓存;
私有IModel模型;
公共人物模型(IModel idModel){
this.idModel=idModel;
}
公共列表getObject(){
if(缓存==null){
cache=convertIdsToPersons(idModel.getObject());
返回缓存;
}
公共无效集合对象(列表对象){
cache=null;
setObject(convertPersonsToIds(ob));
}
}
这不是一个很好的代码,但它显示了一般的思想。你需要考虑的一件事是如何在请求之间串行化这一点,你最好是延长<代码> LoadableDetachableModel <代码>。
另一件事是缓存:它可以避免每次在请求中调用
getObject()
时都必须转换列表。实际上,您可能需要也可能不需要它(取决于很多因素,包括转换速度),但如果您使用它,这意味着如果有其他内容正在修改基础集合,则此模型可能无法检测到更改。谢谢,伙计,现在显示它似乎很简单。今天将尝试此功能,稍后将标记为回答。
class PersonModel extends Model<List<Person>> {
private transient List<Person> cache;
private IModel<List<String>> idModel;
public PersonModel( IModel<List<String>> idModel ) {
this.idModel = idModel;
}
public List<Person> getObject() {
if ( cache == null ) {
cache = convertIdsToPersons( idModel.getObject() );
return cache;
}
public void setObject( List<Person> ob ) {
cache = null;
idModel.setObject( convertPersonsToIds( ob ) );
}
}