Wicketで書いている動的フォームがあり、「ここをクリックして問題を追加」タイプのボタンで複製されるフォームがいくつかあります。私は非常に基本的な(まだWicketを初めて使用する)AJAXyリスナーを作成しましたが、ほとんど機能しますが、ListView内のアイテムを削除または非表示にする方法がわかりません。
これは私に不思議に思います、いくつかのJSにフォームフィールドを複製させる方法はありますか?Wicketコンポーネントを使用してフォームを再構築する前に、Jquery DynamicFormPluginで値を複製していました。これはうまく機能し、非常に理解しやすかった(重要なプラス)。ただし、次のようなプラグインの代わりにプラグインを使用した場合、これが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呼び出しを回避しようとしていることに注意してください。
助言がありますか?