【问题标题】:Why does a Wicket ListView assign changes to the last row only?为什么 Wicket ListView 仅将更改分配给最后一行?
【发布时间】:2011-07-26 09:48:04
【问题描述】:

1) 我正在使用ListView 从数据库中填充一些 2 个标签。该表有 100 行,所以我得到 100 <TD>s。这很好用。

this.selectView = new PageableListView("selectedBG", new PropertyModel(this, "selectedList"), 10) {

private static final long serialVersionUID = 1L;

@Override
protected void populateItem(final ListItem item){
    selParentGclOrg = new Label("selParGclOrgId", new PropertyModel(gclOrg, "parentGclOrgId"));
    selParentGclOrg.setOutputMarkupId(true);

    final AjaxLink ajl = new AjaxLink("clickMe"){
        public void onClick(AjaxRequestTarget target){
            chilgGcl = gclOrg.getGclOrgId();
            selectPopUp.show(target);
        }
    };

    ajl.add(selParentGclOrg);
    final Label lblGclOrg = new Label("selGclOrgId", Integer.valueOf(gclOrg.getGclOrgId()).toString());

    item.add(ajl);
    item.add(lblGclOrg);
}
}

2) 一个标签被超链接并打开一个弹出窗口,我可以从中选择标签 2 的可能值。弹出窗口完美打开。

selectPopUp = new select_popUP("showModal",container){
        @Override
        public void onSelect(AjaxRequestTarget target, int gclOrgId){
            selParentGclOrg.setModelObject(Integer.toString(gclOrgId));
            target.addComponent(selectView);
            close(target);
        }

        @Override
        public void onCancel(AjaxRequestTarget target){
            close(target);
        }
    };

3) 在弹出窗口中,可能的值是超链接的。单击它会关闭弹出窗口并将可能的值发送到主页。这行得通...我认为。

4) 使用以下命令将新值分配给标签 2:

target.addComponent(selectView);

这就是我卡住的地方。 Wicket 应该更改同一行上的标签(至少,我认为),但它正在更新最后一行的标签 2。

我做错了什么?

【问题讨论】:

  • 顺便说一句,如果您从数据库中填充,您可能需要调查DataView,它为分页、排序等提供了更多的灵活性。
  • 我知道这是一个愚蠢的问题,但是因为我在你的代码 sn-p 中看不到它,所以我不得不问它:你在列表中的某个地方调用 setOutputMarkupId() 吗? (呃,我刚刚意识到ListView 可能不允许你这样做,所以我只会给 LT 的答案 +1。)

标签: java listview popup wicket


【解决方案1】:

我没有了解您选择行的逻辑,但我相信我对类似问题的解决方案会对您有所帮助。问题是ListViews 在 AJAX 请求进来时不会自动刷新他们的每一行。我使用的解决方案是wrap the whole shebang in a WebMarkupContainer。完成后,所有内容都会根据请求重新生成。

【讨论】:

【解决方案2】:

我认为帖子中缺少您代码的相关部分... 喜欢:

  • gclOrg 的设置位置
  • selParentGclOrg 是为 ModalWindow 设置的

从我所看到的情况来看,我将赌注押在 populateItem 的问题上,它会在你类中的其余代码之后运行......你的大部分代码将在构造函数时间或 onBeforeRender 上运行,populateItem 将在渲染过程中有时会被调用......但这只是一个疯狂的猜测。

【讨论】:

  • 感谢你们俩的一百万。我想接受这两个答案,但这个网站只允许一个。我不得不修改我的代码以更新属性模型中的正确元素。而且,我不得不重新绘制我的整个列表。没有这两个答案是不可能的。
猜你喜欢
  • 1970-01-01
  • 2012-10-29
  • 1970-01-01
  • 2016-11-25
  • 2011-12-04
  • 1970-01-01
  • 2014-02-24
  • 1970-01-01
  • 2017-12-10
相关资源
最近更新 更多