Wicket:在一个面板中提交另一个面板的表单

4
我得到了一个页面,其中有两个面板(面板a和面板b)。 我使用这些面板之一(面板b)来显示表格中的一些数据。 我添加了一个表单和一些复选框到这个表格中。 我的第二个面板(面板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个回答

2

只需使用以下构造函数创建AjaxSubmitLink

AjaxSubmitLink(String id, Form<?> form)

因此,您需要以某种方式将表单传递给其他面板,以将其添加到提交链接中。个人建议将这两个面板都添加到一个大型表单中。


但是如果我将面板放入页面中,我也需要将“CheckGroup”放入页面中。因为我必须将checkgroup添加到表单中。这意味着我也需要在那里放置我的列表。因此,我需要将我的表单、组和所选列表传递给我的面板。这让我感觉不对劲。我不能在某种程度上在我的“AjaxSubmitLink”中获取所选列表吗? - monti
为什么?选择将在带有表单的面板中进行。您唯一需要的是对该表单的引用。您甚至可以在具有该表单的面板上创建一个getForm方法,并将结果传递给另一个面板。 - Rob Audenaerde
我用一个表单包装了我的两个面板,并在我的页面中创建了表单、selectedList和我的checkgroup。我只将我的selectedList传递到我的Buttonpanel中,以便我可以使用它。 - monti

2

针对通信,您可以查看wicket事件、IEventSinkIEvent<T>。您可以在面板1中执行以下操作:

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

您可以在第二个面板上这样回应:

您可以像这样在第二个面板上进行回应:

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

这可能有点棘手,特别是当你还不知道如何处理它时,在进行ajax操作时。如果您还不了解此操作,请查看此页面获取更多关于事件的信息。
一个更简单的设置是由RobAu建议的。您可以使用FormComponent<T>对象替换面板以提高表单的泛化程度。

谢谢!听起来很有趣,我想我会再多读一些相关的内容。 - monti

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接