我有一個動態表單,我正在Wicket中寫入一些表單,這些表單與「點擊此處添加更多問題」類型的按鈕重複。我已經寫了一個非常基本的(我對Wicket仍然很陌生)的AJAXy監聽器,它主要工作,但我無法弄清楚如何刪除甚至隱藏ListView中的項目。動態添加和刪除沒有AJAX的組件?
這讓我想知道,有什麼辦法只是有一些JS複製表單域?在我使用Wicket組件重新構造窗體之前,我使用Jquery Dynamic Form插件重複了值。這工作很好,很容易理解(一個重要的優點)。不過,我想不通這會如何影響檢票,如果我只是用這個插件,而不是像
//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插件是非常容易使用,但我怎麼能告訴檢票,有超過場它認爲有?
注意我也試圖避免AJAX調用只是添加一個新問題,在我使用應用程序的淤積中可能會成爲一個問題。
有什麼建議嗎?
所以在提交階段沒有辦法告訴Wicket「嘿,這裏有3個字段比你想象的還要多」沒有AJAX訪問服務器?這似乎非常有限。 – TheLQ
據我所知,不,這是不行的。不,我不認爲這是限制性的。您需要服務器端的組件進行驗證和轉換。並存儲這些值。在我所有的檢票項目中,這個阿賈克斯出行永遠不會有問題。你有什麼要求,你認爲他們是限制? – bert
噢,好的。感謝您的幫助 – TheLQ