Wicket:使用ajax使用重复表单的更好方法是什么?

时间:2012-08-13 15:03:30

标签: html ajax wicket

我有以下课程:

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小组:

<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>

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

<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很新。

提前致谢!!

2 个答案:

答案 0 :(得分:1)

实际上,ListView,DataView和其他中继器对你想做的事情很有帮助。

  • ListView应该由一个模型填充,其中包含您想要的项目集合
    ListModel peopleModel = //... DAO access (database) 
    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的容器(*)
public void onEvent(AjaxRequestTarget target) {
    //... on button click or something
    newPeopleList = // ... DAO
    peopleModel.setObject(newPeopleList);

    target.add(peopleContainer); // (*) repaint
}

希望有所帮助。这里有更多例子

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

答案 1 :(得分:0)