あるリスト {ソース} から他のリスト {宛先} に値をロードする 2 つのリスト複数選択ボックスを開発し、Ajaxbuttons を使用して値を相互にロードしようとしています。ajax ボタンをクリックすると Java クラスの値を確認できますが、これらの値が UI のターゲット リストの複数選択ボックスに正しく読み込まれません。以下にコードを掲載しました。ここで何が間違っているのかを確認して教えてください。
private AjaxButton add;
private AjaxButton remove;
private List selectedOriginals;
private List selectedDestinations;
private ListMultipleChoice originals;
private ListMultipleChoice destinations;
private List<String> currentDestinations = new ArrayList<String>();
originals = new ListMultipleChoice("originals", new PropertyModel(this, "selectedOriginals"),APPLICATIONS);
originals.setOutputMarkupId(true);
add(originals);
destinations = new ListMultipleChoice("destinations", new PropertyModel(this, "selectedDestinations"), new LoadableDetachableModel()
{
@Override
protected Object load()
{
return currentDestinations;
}
});
destinations.setOutputMarkupId(true);
add(destinations);
add = new AjaxButton("add")
{
@Override
protected void onError(AjaxRequestTarget target, Form form)
{
System.out.println("Some error in AJX submission....");
target.addComponent(feedbackPanel);
}
@Override
protected void onSubmit(AjaxRequestTarget target, Form form)
{
update(target,selectedOriginals, originals, destinations);
}
};
add.setOutputMarkupId(true);
add(add);
remove = new AjaxButton("remove")
{
@Override
protected void onError(AjaxRequestTarget target, Form form)
{
System.out.println("Some error in AJX submission....**********************");
target.addComponent(feedbackPanel);
}
@Override
protected void onSubmit(AjaxRequestTarget target, Form form)
{
update(target, selectedDestinations, destinations, originals);
}
};
remove.setOutputMarkupId(true);
add(remove);
更新方法 ::
private void update(AjaxRequestTarget target, List<String> selections, ListMultipleChoice from, ListMultipleChoice to)
{
if(selections != null)
{
for (String destination : selections)
{
List<String> choices = getChoices(from);
if (!to.getChoices().contains(destination))
{
to.getChoices().add(destination);
choices.remove(destination);
from.setChoices(choices);
}
}
target.addComponent(to);
target.addComponent(from);
}
}