检票口:从另一个小组提交小组的表格

时间:2014-09-30 06:56:55

标签: java ajax wicket

我有一个带有2个面板的页面(面板a和面板b)。我使用其中一个面板(面板b)来显示表格中的一些数据。我在此表中添加了一个表单和一些复选框。我的第二个面板(panal a)用于显示按钮。 我想通过按下面板a的按钮来提交面板b的形式,所以我可以用已检查的那些来做一些事情。

我搜索了一下,我想我必须使用ajax提交链接。但是我不知道如何得到我检查过的行。

页面标记:

<wicket:extend xmlns:wicket="http://wicket.apache.org">
   <div style="margin-top: 60px">
       <h2><span wicket:id="header"></span></h2>
       <div wicket:id="categoryButtonPanel"></div>
       <div wicket:id="categoryTablePanel"></div>
   </div>
</wicket:extend>

这是我在面板b(categoryTablePanel)中添加复选框的方式:

Form form = new Form("form");
final List<Category> selectedCategorys = new ArrayList<Category>(); //my list where my selected rows are in
CheckGroup group = new CheckGroup("group", selectedCategorys);

DataView dv = new DataView("categoryList", dataProvider) {

      @Override
      protected void populateItem(Item item) {
          final Category category = (Category) item.getModelObject();
          final CompoundPropertyModel<Category> categoryModel = new CompoundPropertyModel<Category>(category);

          item.add(new Check("checkBox", item.getModel()));
          // some more binded rows
 }
};

标记:

<wicket:panel xmlns:wicket="http://wicket.apache.org">
<form wicket:id="form">
<span wicket:id="group">
<div class="table table-striped table-hover table-condensed" style="overflow: auto !important;" wicket:id="categoryTable">
        <table class="table table-striped">
            <thead>
                <th><input type="checkbox" wicket:id="selector">check/uncheck all</input></th>
            </thead>
            <tbody>
                <tr wicket:id="categoryList">
                    <td>
                        <input type="checkbox" wicket:id="checkBox" />
                    </td>
                </tr>
            </tbody>
        </table>
        <div wicket:id="paginator"></div>
    </div>
    </span>
</form>
</wicket:panel>

我实际上可以检查每一行,如果我在表单中创建一个普通按钮,我可以使用列表selectedCategorys来处理数据。

现在我想在第二个面板(categoryButtonPanel)中添加一个或两个按钮来处理我的数据。但是如何?

2 个答案:

答案 0 :(得分:2)

使用此构造函数创建AjaxSubmitLink应该可以正常工作:

AjaxSubmitLink(String id, Form<?> form)

因此,您需要以某种方式将表单传递给其他面板,以将其添加到submitlink。就个人而言,我会将两个面板添加到一个大的形式。

答案 1 :(得分:2)

对于沟通,您可以查看wicket事件,IEventSinkIEvent<T>。你可以做这样的面板1:

public void panel1methodCalledOnSubmit(Category payload) {
     send(getPage(), Broadcast.BREADTH, payload);
}

你可以在面板2上回复这个:

@Override
public void onEvent(IEvent<?> event) {
    if (event.getPayload() instanceof Category) {
        // Do something
    }
}

如果您不知道这是如何工作的话,在做一些事情时这可能有点棘手。请查看this page以获取有关事件的更多信息。

更简单的设置是RobAu建议的内容。您可以使用FormComponent<T>个对象替换面板,以改善表单的泛化。