Ok, I've just whipped up a simple page that demonstrates the problem I was having with ajax updates in a ListView not working.

Theres two ajax timers at the root of the page, and 10 in a loop.  Also note that the use of MarkupIdSetter.INSTANCE crashes.

I see the models for each ListItem update once on page load, but nothing subsequent.

AjaxTest.java:
--------------------------------
/*
 * Created by IntelliJ IDEA.
 * User: amrk
 * Date: 11/02/2006
 * Time: 16:55:54
 */
package com.theoryinpractice.timetrackr.pages;

import com.theoryinpractice.timetrackr.TimeTrackrPage;
import wicket.AttributeModifier;
import wicket.Component;
import wicket.PageParameters;
import wicket.ajax.AjaxSelfUpdatingTimerBehavior;
import wicket.markup.html.basic.Label;
import wicket.markup.html.list.ListItem;
import wicket.markup.html.list.ListView ;
import wicket.model.Model;
import wicket.util.time.Duration;

import java.util.ArrayList;
import java.util.List;
import java.io.Serializable;

public class AjaxTest extends TimeTrackrPage {

    int count = 0;
    int count2 = 0;
    List items;

    public class IntegerHolder implements Serializable {
        private Integer value = 0;

        public Integer getValue() {
            return value;
        }

        public void setValue(Integer value) {
            this.value = value;
        }

        public void increment() {
            value = value++;
        }
    }

    public AjaxTest(final PageParameters parameters) {


        Label label = new Label("one", new Model() {
            public Object getObject(final Component component) {
                count++;
                return Integer.valueOf(count).toString();
            }
        });
        label.add(new AjaxSelfUpdatingTimerBehavior(Duration.seconds(1)));
        add(label);

        label = new Label("two", new Model() {
            public Object getObject(final Component component) {
                count2++;
                return Integer.valueOf(count2).toString();
            }
        });
        label.add(new AjaxSelfUpdatingTimerBehavior(Duration.seconds(2)));

        add(label);


        items = new ArrayList();
        for (int i = 1; i < 10; i++) {
            items.add(new IntegerHolder());
        }

        add(new ListView("list", items) {

            protected void populateItem(final ListItem item) {
                final IntegerHolder holder = (IntegerHolder) item.getModelObject();

                final Label label = new Label("value", new Model() {
                    public Object getObject(final Component component) {
                        System.out.println(holder.toString() + " refreshed");
                        holder.increment();
                        return holder.getValue().toString();
                    }
                });
                item.add(label);
//                label.add(MarkupIdSetter.INSTANCE);
                label.add(new AttributeModifier("id", true, new Model() {
                    public Object getObject(final Component component) {
                        return label.getPageRelativePath();
                    }
                }));
                label.add(new AjaxSelfUpdatingTimerBehavior(Duration.seconds(1)));
            }
        });

    }
}
---------------------------------

AjaxTest.html

----------------------------------
<html>
    <head>
        <title>Time Tracker</title>
        <link rel="stylesheet" href="" type="text/css"/>
    </head>

    <body>

        <span wicket:id="one">ONE</span><br/>
        <span wicket:id="two">ONE</span><br/>

        <ul>
            <li wicket:id="list">
                <span wicket:id="value">value</span>
            </li>
        </ul>

    </body>
</html>

-------------------------------------



--
i like my video games - mamma said they are gonna melt my brains
i like my video games - i don't care what daddy said; they're my reality
  - henning pauly

Reply via email to