You are viewing a plain text version of this content. The canonical link for it is here.
Posted to users@wicket.apache.org by Luther Baker <lu...@gmail.com> on 2009/04/05 04:22:41 UTC

Cache oddity ... maybe

I have a page that displays a list of Titles.

I have a few links off this page that take you to a second page where you
can either

a) create a new Title
b) edit an existing Title
c) delete an existing Title

The onClick handlers for b and c create the destination page with the
selected object where as option a simply prepares a blank form for the user
to type in. In this simplistic case, a Title is simply a bare-bones Entity
with just a "Long id" and a "String name".

All is fine -- except on the very first action. The very first meaning,
right after I rebuild and restart the application. After ADDING a new Title
- the onSubmit handler of that page simply sets the response page which is a
POJO page that takes no arguments.

That original page comes up - but the listing of Titles is always missing
the very last one I entered. If I refresh the screen - all is well. If I add
25 more Titles, they always show up right away - ie: as soon as page 2
directs me back to page 1. But for some reason, the very first time - the
new entry doesn't show up upon returning the first listing page.

I am using some nominal Ajax on the 2nd page to go back and forth between
viewing and editing ... but the final submit is always a full refresh back
to the original page. I recently added b and c ... and oddly enough ... the
edits or deletes do not show up on the first page ... the first time after a
rebuild and restart ... but then work consistently everytime after that.

Thoughts? Any quick thoughts as to what migh be going on in my env? For what
its worth - I have an outer filter that is creating and commiting Hibernate
transactions and they are firing as expected ...

Thanks in advance,

-Luther

Re: Cache oddity ... maybe

Posted by TH Lim <ss...@gmail.com>.
I have briefly looked at ur codes. Have u checked if your code has not
executed the refresh / reload routine? Some methods are not executed in
AJAX. Sorry I can't tell u what methods offhand. If you placed your code in
those methods then ur new items will not be loaded but it will when u do a
page refresh. This has happened to me before. 
-- 
View this message in context: http://www.nabble.com/Cache-oddity-...-maybe-tp22889814p22983675.html
Sent from the Wicket - User mailing list archive at Nabble.com.


---------------------------------------------------------------------
To unsubscribe, e-mail: users-unsubscribe@wicket.apache.org
For additional commands, e-mail: users-help@wicket.apache.org


Re: Cache oddity ... maybe

Posted by Luther Baker <lu...@gmail.com>.
I've included the "Projects" page which lists all the projects and the
AddProjectPanel which contains the logic to save a new project and go back
to the Projects page.

Maybe I should explicitly create a new Projects page in the onSubmit handler
of my AddProjectPanel? Oddly, even today - it doesn't consistently have this
problem. Just 'sometimes' when I set the response page back to the main
listing page - the list isn't updated - generally only happens the first
time ...

Maybe it is a Hibernate thing. I'm still digging.

-Luther


@RequiresAuthorization("user")
public class ProjectsPage extends MenuLayout
{
    private String confirmationMessage;

    public ProjectsPage()
    {
        this(new ResourceModel("defaultBodyTitle"));
    }

    public ProjectsPage(final ResourceModel bodyTitle)
    {
        super(bodyTitle, ProjectsPage.class);

        //
        // menu
        //

        // add
        Link link = new Link("add.category.link")
        {
            private static final long serialVersionUID =
142459578574869903L;

            @Override
            public void onClick()
            {
                final Page next = new CategoryPage();
                this.setResponsePage(next);
            }
        };
        this.add(link);

        // add project
        link = new Link("add.project.link")
        {
            private static final long serialVersionUID =
-7045649583675065507L;

            @Override
            public void onClick()
            {
                final Page next = new AddProjectPage();
                this.setResponsePage(next);
            }
        };
        this.add(link);

        // filter
        final AjaxFallbackLink filterLink = new
AjaxFallbackLink("filter.projects.link")
        {
            private static final long serialVersionUID =
-5599387710174768323L;

            @Override
            public void onClick(final AjaxRequestTarget target)
            {
                // noop
            }
        };
        this.add(filterLink);

        //
        // projects
        //

        final ListView categories = new ListView("categories",
this.getCategories())
        {
            private static final long serialVersionUID =
-2181837156022701325L;

            @Override
            protected void populateItem(final ListItem item)
            {
                final Category category = (Category) item.getModelObject();
                final Label label = new Label("categoryName",
category.getName());
                final Link link = new Link("categoryLink")
                {
                    private static final long serialVersionUID =
-4816807486013970750L;

                    @Override
                    public void onClick()
                    {
                        final Page next = new CategoryPage(category);
                        this.setResponsePage(next);
                    }
                };
                link.add(label);
                item.add(link);

                final ListView projects = new ListView("projects",
ProjectsPage.this.getProjects(category))
                {
                    private static final long serialVersionUID =
-2181837156022701325L;

                    @Override
                    protected void populateItem(final ListItem item)
                    {
                        final Project project = (Project)
item.getModelObject();

                        // project
                        PageParameters pars = new PageParameters();
                        String id = project.getId().toString();
                        pars.add(ProjectPage.Params.ID, id);
                        BookmarkablePageLink link = new
BookmarkablePageLink("projectLink", ProjectPage.class, pars);
                        String val = project.getName();
                        link.add(new Label("projectName", val));
                        item.add(link);

                        // acronym
                        val = project.getAcronym();
                        item.add(new Label("projectAcronym", val));

                        // resource
                        final Resource res = project.getLead();
                        if (res != null)
                        {
                            id = Long.toString(res.getId());
                            pars = new PageParameters();
                            pars.add(ResourcePage.Params.ID, id);
                            val = project.getLead().getUserName();
                        }
                        link = new BookmarkablePageLink("projectLeadLink",
ResourcePage.class, pars);
                        link.add(new Label("projectLead", val));
                        item.add(link);

                        // url
                        val = project.getUrl();
                        item.add(new Label("projectUrl", val));
                    }
                };
                item.add(projects);
            }
        };
        this.add(categories);
    }

    /**
     * @return the confirmationMessage
     */
    public String getConfirmationMessage()
    {
        return this.confirmationMessage;
    }

    /**
     * @param confirmationMessage
     *            the confirmationMessage to set
     */
    public void setConfirmationMessage(final String confirmationMessage)
    {
        this.confirmationMessage = confirmationMessage;
    }

    private List<Category> getCategories()
    {
        final List<Category> categories =
ServiceLocator.getPersistenceService().findAll(Category.class);
        return categories;
    }

    @SuppressWarnings("unchecked")
    private List<Project> getProjects(final Category category)
    {
        final PersistenceService ps =
ServiceLocator.getPersistenceService();
        final SimpleExpression clause = Restrictions.eq("category",
category);
        final Criteria query = ps.createCriteria(Project.class);
        query.add(clause);
        final List<Project> projects = query.list();
        return projects;
    }
}



public class AddProjectPanel extends Panel
{
    private static final long serialVersionUID = 6620944941617610148L;

    public AddProjectPanel(final String id)
    {
        super(id);
        final Form form = new AddProjectForm("addProjectForm");
        this.add(form);
    }

    private static class AddProjectForm extends Form
    {
        private static final long serialVersionUID = 4430646734993360357L;

        private final Project project;

        public AddProjectForm(final String id)
        {
            super(id);
            this.project = new Project();
            this.setModel(new CompoundPropertyModel(this.project));

            final FeedbackPanel feedbackPanel = new
ErrorFeedbackPanel("feedbackPanel");
            this.add(feedbackPanel);

            // acronym
            this.add(new TextField("acronym").setRequired(true));

            // category
            final IModel categoryModel = new PropertyModel(this.project,
"category");
            IModel detachableModel = new LoadableDetachableModel()
            {
                private static final long serialVersionUID =
-7673902927079196813L;

                @Override
                protected Object load()
                {
                    final List<Category> categories =
ServiceLocator.getPersistenceService().findAll(Category.class);
                    return categories;
                }
            };
            ChoiceRenderer cr = new ChoiceRenderer("name", "id");
            DropDownChoice ddc = new DropDownChoice("category",
categoryModel, detachableModel, cr);
            ddc.setRequired(true);
            this.add(ddc);

            // lead
            final IModel leadModel = new PropertyModel(this.project,
"lead");
            detachableModel = new LoadableDetachableModel()
            {
                private static final long serialVersionUID =
-7673902927079196813L;

                @Override
                protected Object load()
                {
                    final List<Resource> people =
ServiceLocator.getPersistenceService().findAll(Resource.class);
                    return people;
                }
            };
            cr = new ChoiceRenderer("fullName", "id");
            ddc = new DropDownChoice("lead", leadModel, detachableModel,
cr);
            this.add(ddc);

            this.add(new TextField("name").setRequired(true));
            this.add(new TextField("url"));
            final Button submit = new Button("submit", new
ResourceModel("addSubmitLabel"));
            this.add(submit);
        }

        /**
         * @see org.apache.wicket.markup.html.form.Form#onSubmit()
         */
        @Override
        protected final void onSubmit()
        {
            // TODO - validate if necessary, handle errors

ServiceLocator.getPersistenceService().saveOrUpdate(this.project);
            this.setResponsePage(ProjectsPage.class);
        }
    }
}




On Sun, Apr 5, 2009 at 3:00 AM, TH Lim <ss...@gmail.com> wrote:

>
> For starter, I would remove the filter and Hibernate codes, to localize the
> problem to Wicket.
>
> It helps if you could provide a snippet of the code or better if u can
> provide working code of the problem u encounter.
>
>
>
> luther.baker wrote:
> >
> > I have a page that displays a list of Titles.
> >
> > I have a few links off this page that take you to a second page where you
> > can either
> >
> > a) create a new Title
> > b) edit an existing Title
> > c) delete an existing Title
> >
> > The onClick handlers for b and c create the destination page with the
> > selected object where as option a simply prepares a blank form for the
> > user
> > to type in. In this simplistic case, a Title is simply a bare-bones
> Entity
> > with just a "Long id" and a "String name".
> >
> > All is fine -- except on the very first action. The very first meaning,
> > right after I rebuild and restart the application. After ADDING a new
> > Title
> > - the onSubmit handler of that page simply sets the response page which
> is
> > a
> > POJO page that takes no arguments.
> >
> > That original page comes up - but the listing of Titles is always missing
> > the very last one I entered. If I refresh the screen - all is well. If I
> > add
> > 25 more Titles, they always show up right away - ie: as soon as page 2
> > directs me back to page 1. But for some reason, the very first time - the
> > new entry doesn't show up upon returning the first listing page.
> >
> > I am using some nominal Ajax on the 2nd page to go back and forth between
> > viewing and editing ... but the final submit is always a full refresh
> back
> > to the original page. I recently added b and c ... and oddly enough ...
> > the
> > edits or deletes do not show up on the first page ... the first time
> after
> > a
> > rebuild and restart ... but then work consistently everytime after that.
> >
> > Thoughts? Any quick thoughts as to what migh be going on in my env? For
> > what
> > its worth - I have an outer filter that is creating and commiting
> > Hibernate
> > transactions and they are firing as expected ...
> >
> > Thanks in advance,
> >
> > -Luther
> >
> >
>
> --
> View this message in context:
> http://www.nabble.com/Cache-oddity-...-maybe-tp22889814p22891364.html
> Sent from the Wicket - User mailing list archive at Nabble.com.
>
>
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: users-unsubscribe@wicket.apache.org
> For additional commands, e-mail: users-help@wicket.apache.org
>
>

Re: Cache oddity ... maybe

Posted by TH Lim <ss...@gmail.com>.
For starter, I would remove the filter and Hibernate codes, to localize the
problem to Wicket.

It helps if you could provide a snippet of the code or better if u can
provide working code of the problem u encounter.



luther.baker wrote:
> 
> I have a page that displays a list of Titles.
> 
> I have a few links off this page that take you to a second page where you
> can either
> 
> a) create a new Title
> b) edit an existing Title
> c) delete an existing Title
> 
> The onClick handlers for b and c create the destination page with the
> selected object where as option a simply prepares a blank form for the
> user
> to type in. In this simplistic case, a Title is simply a bare-bones Entity
> with just a "Long id" and a "String name".
> 
> All is fine -- except on the very first action. The very first meaning,
> right after I rebuild and restart the application. After ADDING a new
> Title
> - the onSubmit handler of that page simply sets the response page which is
> a
> POJO page that takes no arguments.
> 
> That original page comes up - but the listing of Titles is always missing
> the very last one I entered. If I refresh the screen - all is well. If I
> add
> 25 more Titles, they always show up right away - ie: as soon as page 2
> directs me back to page 1. But for some reason, the very first time - the
> new entry doesn't show up upon returning the first listing page.
> 
> I am using some nominal Ajax on the 2nd page to go back and forth between
> viewing and editing ... but the final submit is always a full refresh back
> to the original page. I recently added b and c ... and oddly enough ...
> the
> edits or deletes do not show up on the first page ... the first time after
> a
> rebuild and restart ... but then work consistently everytime after that.
> 
> Thoughts? Any quick thoughts as to what migh be going on in my env? For
> what
> its worth - I have an outer filter that is creating and commiting
> Hibernate
> transactions and they are firing as expected ...
> 
> Thanks in advance,
> 
> -Luther
> 
> 

-- 
View this message in context: http://www.nabble.com/Cache-oddity-...-maybe-tp22889814p22891364.html
Sent from the Wicket - User mailing list archive at Nabble.com.


---------------------------------------------------------------------
To unsubscribe, e-mail: users-unsubscribe@wicket.apache.org
For additional commands, e-mail: users-help@wicket.apache.org