to quickly do it right in your example:

you should do it in reverse.

so this:

for(;i<ids.length;i++)
             choices.add(values[i]);

should be

for(;i<ids.length;i++)
             choices.add(ids[i]);


so the id's are the valules/choices not the display values. Thats done in
the choicerenderer:

  public Object getDisplayValue(Object obj) {
           // obj == id, lookup id in id array then return value out of
value array.
       }

       public String getIdValue(Object obj, int i) {
             return obj; // obj == the id
       }


hopefully this will make it also more clear to other people, because this
question does popup again and again. :(
To many people come from the Swing world, with its Cell renderers :(

johan



public class DateDropDownChoice extends DropDownChoice implements
Serializable {
    // values to go into the hidden value attribute in the HTML option tag
    // AND to go into the model/database
    final static private String[] ids =
{"20031","20032","20033","20034","20041",…};

    // values to be displayed in the dropdown
    final static private String[] values ={"2003, Fall","2003,
Winter","2003, Spring","2003, Summer","2004, Fall",…};

    public DateDropDownChoice(String id, IModel iModel) {
        super(id, iModel);
        ArrayList choices = new ArrayList();

        int i = 0;
        for(;i<ids.length;i++)
           // choices.add(new DateChoice(ids[i],values[i]));
              choices.add(values[i]);

        this.setChoices(choices);
        this.setChoiceRenderer(new CustomChoiceRenderer());
    }



    class CustomChoiceRenderer implements IChoiceRenderer{


        public Object getDisplayValue(Object obj) {
            return obj.toString();
        }

        public String getIdValue(Object obj, int i) {

            /**
             * An "i" of -1 is passed when a previous selection
             * has been made and is stored, so just return the obj string
value
             * because it is a properly stored value such as "20063" from
the previous submission
             *
             * An "i" > 0 means that I need to look up the
appropriate/corresponding
             * value from the ids array.
             *
             */

            String returnVal = i<0?obj.toString():ids[i];
            System.out.println("returnVal: "+returnVal+" :: ID:: "+i);
            return returnVal;
        }
    }
}



-------------------------------------------------------------------------
Take Surveys. Earn Cash. Influence the Future of IT
Join SourceForge.net's Techsay panel and you'll get the chance to share your
opinions on IT & business topics through brief surveys - and earn cash
http://www.techsay.com/default.php?page=join.php&p=sourceforge&CID=DEVDEV
_______________________________________________
Wicket-user mailing list
Wicket-user@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/wicket-user

Reply via email to