Thanks, I understood that, but my mind keeps having flashbacks of struts.  I don't have to worry about the index now, but what about the displayName?

Is there an easy way to use a custom displayName instead of using the default toString()?
For instance my database object's toString() prints out all the values of the columns, when I just want to display a 'name' column in the dropdown.  I know I can do approach #2, but that would entail me selecting the objects from the database, iterating through them to create new pseudo objects.  I would like to just create a ChoiceList passing it an interface to render getDisplayValue.


On 4/28/05, Christopher Turner <[EMAIL PROTECTED]> wrote:
Hi Joe,
I think the problem you are having is that you are still worrying about the index value that is used when the form containing the rendered select element is submitted. This is one of the areas that you have to change your mindset when using Wicket - it takes a while to get your head around it.
 
What you have to remember is that from a conceptual point of view a drop down choice is just a list of objects that you can pick from. The fact that HTML requires them to have a submit value and a display value is kind of irrelevant. If you give Wicket the list of possible objects it will manage its own indexing. When the page is rendered, the list option that matches the current object in your model will be selected. When the form is submitted Wicket will do all of the index resolution for you and then set the object corresponding to the dropdown option that was selected back in your model.
 
Thus, in your example, after the form is submitted, the model object that you supplied to the drop down list will have the Integer object representing the year that the user picked - you need do nothing more than use this value. When you start thinking about dropdowns of database values, all you need to do is create a list of objects, where each object represents one of the values from the database. Once your form is submitted the model will contain the object that represents the value that the user selected. There are two approaches: 1) The objects you use could be real business objects represented by a row in the database OR 2) The objects could be pseudo objects containing a primary key and display value when you don't want to instantiate actual business object instances in order to present the dropdown list.
 
Try to detach yourself from the underlying name=value parameter mechanism of HTTP and think in terms of models and objects. This is where Wicket saves you all of the work.
 
p.s. The DropDownChoice component has built-in support for a "Please Select" option - so you don't need to build this yourself. Have a look at the code/examples to see how it works.
 
regards,
Chris

How do I create a dropdown list and pick what to use for an id and displayValue?
I want to create a dropdown with the first item to be index=0, displayValue=Please Select then the rest to be the last 100 years.
I know I'll have the same problem when I want to create dropdowns of database objects.
Is there an easy solution?

This is what I have so far, but the id is the index.

ChoiceList years = new ChoiceList();
int currentYear = Calendar.getInstance().get(Calendar.YEAR);
years.add("Please Select");
for (int i = 0; i <= 100; i++) {
    Integer year = currentYear - i;
    years.add(year);
}

DropDownChoice yearDropDown = new DropDownChoice("year", model, years);



Thanks

Reply via email to