我有一个动态表单,我在 Wicket 中编写了一些表单,这些表单通过“单击此处添加更多问题”类型的按钮进行复制。我编写了一个非常基本的(我还是 Wicket 的新手)AJAXy 侦听器,该侦听器主要工作,但我不知道如何删除甚至隐藏我的 ListView 中的项目。
这让我想知道,有没有办法让一些 JS 复制表单字段?在我使用 Wicket 组件重新构建表单之前,我让 Jquery Dynamic Form Plugin 复制了这些值。这很好用并且很容易理解(一个重要的优点)。但是,如果我只是使用插件而不是类似的东西,我无法弄清楚这将如何影响 Wicket
//Issue box magic
final MarkupContainer rowPanel = new WebMarkupContainer("issuesPanel");
rowPanel.setOutputMarkupId(true);
form.add(rowPanel);
ArrayList numIssues = new ArrayList();
numIssues.add(new Object());
numIssues.add(new Object());
numIssues.add(new Object());
final ListView lv = new ListView("issuesBox", numIssues) {
@Override
protected void populateItem(ListItem item) {
int index = item.getIndex() + 1;
item.add(new DropDownChoice("issues", combinedIssues));
item.add(new TextField<String>("note"));
}
};
lv.setReuseItems(true);
rowPanel.add(lv);
form.add(new AjaxSubmitLink("addIssue", form) {
@Override
public void onSubmit(AjaxRequestTarget target, Form form) {
lv.getModelObject().add(new Object());
if (target != null)
target.add(rowPanel);
}
}.setDefaultFormProcessing(false));
form.add(new AjaxSubmitLink("removeIssue", form) {
@Override
public void onSubmit(AjaxRequestTarget target, Form form) {
//Wicket gets very angry when you remove components, so just hide it (recommended way)
if (target != null) {
Component lastObject = (Component)lv.get(lv.getList().size() - 1);
lastObject.setVisible(false);
log.debug("Components " + lv.get );
}
}
}.setDefaultFormProcessing(false));
JQuery 插件更容易使用,但我如何告诉 Wicket 字段比它想象的要多?
请注意,我还试图避免 AJAX 调用只是为了添加一个新问题,在我使用该应用程序的淤泥中可能会成为一个问题。
有什么建议么?