0

我有以下课程:

public class Group {
    private long id;
    private String name;
    ...
    private List<Person> members;
}

public class Person {
    private long id;
    private String name;
    private String comments;
}

我有以下检票口面板:

<wicket:panel>
   <div>
     <!-- Group data -->
   </div>
   <form wicket:id="group">
   <table>
      <tbody wicket:id="container">
         <tr wicket:id="members">
             <td wicket:id="personId"></td>
             <td wicket:id="name"></td>
             <td><input type="text" name="comments" wicket:id="comments" value="" /></td>
         </tr>
      </tbody>
   </table>
   <input type="submit" value="save" >
   </form>      
</wicket:panel>

另一方面,我有一个具有过滤功能的网页并向我显示不同的组:

<html>
<body>
   <form wicket:id="filterOptions">
     <!-- filter options -->
   </form>
   <div wicket:id="resultingGroups">
       <!-- contains the groups that matching the filters -->
   </div>
</body>
</html>

我想更新执行 ajax 提交的组。我尝试使用 ListView,但是,我不知道为什么,当我单击“保存”按钮时,更改会反映在第一个组面板中,如果我更新任何其他组并单击“保存”,则组对象不会更新。

我研究了很多,发现 ListView 不是我想做的好选择,但我不知道哪个 View 是正确的。

过滤器表单也适用于 ajax 按钮,并且工作正常。

我对 Wicket 很陌生。

提前致谢!!

4

2 回答 2

1

实际上 ListView、DataView 和其他中继器对你想做的事情有好处。

  • ListView 应该由带有您想要的项目集合的模型填充
    ListModel peopleModel = //... DAO 访问(数据库)
    ListView peopleList = new ListView("resultingGroups", peopleModel){ ... };
  • 为了重新绘制(刷新 ListView),您应该将其封装peopleList在一个容器中.setOutputMarkupId(true);(以便 Wicket 能够通过 ajax 找到该容器)。
...
    WebMarkupContainer peopleContainer = new WebMarkupContainer("container");
    peopleContainer.setOutputMarkupId(true);
    peopleContainer.add(peopleList);
...
  • ...然后每当您想刷新 List 中显示的结果时,您需要将新结果设置为模型 ( peopleModel) 并重新绘制具有 ListView ( (*))的容器
公共无效 onEvent(AjaxRequestTarget 目标){
    //...点击按钮或其他东西
    newPeopleList = // ... DAO
    peopleModel.setObject(newPeopleList);

    目标.add(peopleContainer); // (*) 重绘
}

希望有帮助。更多示例在这里

https://cwiki.apache.org/WICKET/how-to-repaint-a-listview-via-ajax.html

于 2012-08-16T13:23:15.140 回答
0

检查https://github.com/vineetsemwal/quickview/wiki

于 2012-08-21T15:12:09.820 回答