改札でパレットを作成し、パレットの左側のウィンドウにデータを入力できます。しかし、パレットのオプションを動的にして、同じことができるようにしたいと考えています。しかし問題は、選択したオプションがパレットに表示されないことです。選択したオプションに応じて、パレットの上にドロップダウンがあり、パレットに入力します。
例 (ドロップダウン(ロール) と値): 1.シナリオ: ドロップダウン --> TL,マネージャー,SE,SSE パレット --> 最初は値はありませんが、ロール TL の作成時にスキルがありますパレットの儀式ウィンドウで選択します。10 個のスキルのうち 4 個のスキルで TL ロールが作成されたとします。 2.シナリオ:ロール TL を編集したいのですが、この場合、ロール TL を選択するたびに、選択されたものが右側にあり、利用可能なものが左側にあるように、パレットが取り込まれます。私は2番目のシナリオで失敗しています。
コードは次のとおりです。
public class DropDownChoicePage extends WebPage {
private String selectedMake;
private final Map<String, List<String>> modelsMap = new HashMap<String, List<String>>();
private List<String> selected = new ArrayList<String>();
private String selectedEngine = "Google";
public DropDownChoicePage(final PageParameters parameters) {
add(new FeedbackPanel("feedback"));
modelsMap.put("AUDI", Arrays.asList(new String[] { "A4", "A6", "TT" }));
modelsMap.put("CADILLAC", Arrays.asList(new String[] { "CTS", "DTS", "ESCALADE", "SRX","DEVILLE" }));
modelsMap.put("FORD", Arrays.asList(new String[] { "CROWN", "ESCAPE", "EXPEDITION","EXPLORER", "F-150" }));
IModel<List<? extends String>> makeChoices = new AbstractReadOnlyModel<List<? extends String>>()
{
private static final long serialVersionUID = 1L;
@Override
public List<String> getObject()
{
Set<String> keys = modelsMap.keySet();
List<String> list = new ArrayList<String>(keys);
return list;
}
};
IModel<List<? extends String>> paletteChoices = new AbstractReadOnlyModel<List<? extends String>>(){
private static final long serialVersionUID = 1L;
@Override
public List<? extends String> getObject() {
List<String> models = modelsMap.get(selectedMake);
if (models == null)
{
models = Collections.emptyList();
}else if("FORD".equals(selectedMake)){
selected.add("CROWN");
selected.add("ESCAPE");
}
return models;
}
};
final DropDownChoice<String> makes = new DropDownChoice<String>("makes",new PropertyModel<String>(this, "selectedMake"), makeChoices);
IChoiceRenderer<String> renderer = new ChoiceRenderer<String>();
final Palette<String> palette = new Palette<String>("palette",
new ListModel<String>(selected),
paletteChoices,
renderer, 10, true);
palette.setOutputMarkupId(true);
makes.add(new AjaxFormComponentUpdatingBehavior("onchange")
{
private static final long serialVersionUID = 1L;
@Override
protected void onUpdate(AjaxRequestTarget target)
{
selected = new ArrayList<String>();
target.addComponent(palette);
System.out.println("AjaxFormComponentUpdatingBehavior(\"onchange\")");
System.out.println("Selected Make:"+selectedMake);
}
});
Form<?> form = new Form<Void>("form") {
private static final long serialVersionUID = 1L;
@Override
protected void onSubmit() {
info("Selected search engine : " + selectedEngine);
selected = new ArrayList<String>();
}
};
add(form);
form.add(palette);
form.add(makes);
}
}
2 番目のシナリオで私を助けてください。つまり、ドロップダウンの変更イベントで、パレットの左右のウィンドウに使用可能な値と選択された値を入力します。
ありがとう、サラン。