Wicket-包裹式收集模型“;“转变”;

Wicket-包裹式收集模型“;“转变”;,wicket,Wicket,我有一个域对象,它有一组基本值,这些值表示另一个域对象(“Person”)的主键 我有一个Wicket组件,它接受IModel,并允许您查看、删除和向列表中添加人员 我想编写一个实现IModel的包装器,但它由来自原始域对象的PropertyModel支持 仅查看很简单(为了简洁起见,Scala语法): 但是我应该如何写这篇文章来允许从原始的long列表中添加和删除呢 或者模型不是进行这种翻译的最佳场所 谢谢 我不太清楚我是否理解你的问题,也不理解Scala的语法 但是,要从列表中删除一个实体,

我有一个域对象,它有一组基本值,这些值表示另一个域对象(“Person”)的主键

我有一个Wicket组件,它接受IModel,并允许您查看、删除和向列表中添加人员

我想编写一个实现IModel的包装器,但它由来自原始域对象的PropertyModel支持

仅查看很简单(为了简洁起见,Scala语法):

但是我应该如何写这篇文章来允许从原始的long列表中添加和删除呢

或者模型不是进行这种翻译的最佳场所


谢谢

我不太清楚我是否理解你的问题,也不理解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 ) );
    }

}