Question

I have created a list view which will show number of records in table view and inside the listview contains a textfield and a dropdownchoice field.

What I need to achieve is onchange of the textfield to default the value in the dropdownchoice for a particular record. But appears that when using the following codes, when its only 1 record to be updated, it works, but when multiple records exist, it will fail. Need help! Thanks in advance.

Sample Code:

new ListView("list", getItemList()) {
    protected void populateItem(ListItem item) {
        final Sl qv = (Sl) item.getModelObject();
        item.setModel(new CompoundPropertyModel(qv));

        ratio = new TextField("ratio");
        item.add(ratio);
        ratio.setOutputMarkupId(true);

        ratio.add(new AjaxFormComponentUpdatingBehavior("onkeyup") {
            @Override
            protected void onUpdate(AjaxRequestTarget target) {
                getProperties().put("rating" + Sl.getid(), "Strong");
                target.addComponent(rating);
            }
        });

        rating = new DropDownChoice("rating", getDdlmodels().get(item.getIndex()), ratingList);
        item.add(rating);
        rating.setOutputMarkupId(true);
    }
}

Note: PropertyModel with ValueMap properties as key (DdlModels) has been used to get and set value of the dropdownchoice. Upon onchange of the textfield, the propertyModel has been updated, however the dropdownchoice has not been refresh/re-rendered even though I have added for ajax refresh.

Was it helpful?

Solution

The problem is that you "bind" all textfields to the last "rating" since it's a private member of your class.

When the "onUpdate" behavior gets called, it will use the rating member that is declared outside the scope of the populate item method thus the one assigned at the last iteration of the listview.

That's why it works for one record. Your current implementation should work for the last "row" only.

The "rating" variable should be declared inside the populate item method.

Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top