2017-06-26 2 views
0

Ich habe eine einzige Einstellung, die ich an mehreren Orten verwenden möchte. Ich muss einen ganzzahligen Wert erhalten und setzen: 0, 1, 2, -1. Die angezeigte Zeichenfolge wird nicht gespeichert.Wicket - wie SelectOption mit DropDownChoice verwenden?

Fragment des html:

<select wicket:id="thingPref"> 
    <option>1</option> 
    <option>2</option> 
</select> 

Fragment des Java.

import org.apache.wicket.extensions.markup.html.form.select.SelectOption; 
import org.apache.wicket.markup.html.form.DropDownChoice; 

private SelectOption thingPreference; 

private void buildCommon() 
{ 
    thingPreference = new SelectOption(Integer.toString(setting()), new Model<String>("dummy")); 
    List<SelectOption> prefChoices = new ArrayList<SelectOption>(); 
    prefChoices.add(new SelectOption<String>("0", new Model<String>("Current Thing"))); 
    prefChoices.add(new SelectOption<String>("1", new Model<String>("One Prior Thing"))); 
    prefChoices.add(new SelectOption<String>("2", new Model<String>("Two Prior Things"))); 
    prefChoices.add(new SelectOption<String>("-1", new Model<String>("All Things"))); 
    DropDownChoice<SelectOption> prefselect = new DropDownChoice<SelectOption>("thingPref", 
      new PropertyModel<SelectOption>(this, "thingPreference"), prefChoices) 
    { 
     private static final long serialVersionUID = 1L; 

     protected boolean wantOnSelectionChangedNotifications() 
     { 
      return true; 
     } 

     protected void onSelectionChanged(final String newSelection) 
     { 
      System.out.format("onSelectionChanged(%s)%n", newSelection); 
     } 
    }; 
    prefselect.setNullValid(false); 
    prefselect.setRequired(true); 
    add(prefselect); 
} 

Developer Tools zeigt html wie diese

<option value="3">[SelectOption [Component id = -1]]</option> 

wenn ich

<option value="-1">All Things</option> 

brauchen die Lösung nicht so einfach zu sein, sieht wie ein Renderer Hinzufügen und ich bin nicht sicher, dass die Einstellung sollte eine Aufzählung verwenden. Ich benutze Wicket 7.6. Irgendwelche Ideen?

Antwort

0

org.apache.wicket.extensions.markup.html.form.select.SelectOption sollte mit org.apache.wicket.extensions.markup.html.form.select.Select, nicht mit org.apache.wicket.markup.html.form.DropDownChoice verwendet werden.

Für Ihren Anwendungsfall können Sie entweder DropDownChoice oder Select verwenden. In beiden Fällen benötigen Sie benutzerdefinierte IChoiceRenderer.

Select sollte als DropDownChoice bevorzugt werden, wenn Sie mehr Kontrolle über jede einzelne Option benötigen. DropDownChoice arbeitet mit einer Liste von POJOs.

0

Ich habe einen benutzerdefinierten Renderer angewendet, um die Datenoptionen anzuzeigen.

private static final List<Integer> TermSettings = Arrays.asList(0, 1, 2, -1); 

ChoiceRenderer<Integer> choiceRenderer = new ChoiceRenderer<Integer>() 
{ 
    private static final long serialVersionUID = 1L; 

    @Override 
    public Object getDisplayValue(Integer value) 
    { 
     switch (value) 
     { 
      case 0: 
       return "Current Term"; 
      case 1: 
       return "One Prior Term"; 
      case 2: 
       return "Two Prior Terms"; 
      case -1: 
       return "All Terms"; 
      default: 
       throw new IllegalStateException(value + " is not mapped!"); 
     } 
    } 

    @Override 
    public String getIdValue(Integer object, int index) 
    { 
     Integer idvalue = TermSettings.get(index); 
     String strvalue = String.valueOf(idvalue); 
     return strvalue; 
    } 
}; 
Verwandte Themen