Do you find out what exactly is the problem and solution, I ran into the same problem.
thanks in advance! rtow Dan Kaplan-3 wrote: > > The most important part of this is probably HOW I update the model. I am > using AJAX. > > -----Original Message----- > From: Dan Kaplan [mailto:dkap...@citizenhawk.com] > Sent: Tuesday, April 01, 2008 11:07 AM > To: users@wicket.apache.org > Subject: Wizard seems to cache pages even on model change > > Hello, > > Here is my scenario. I have a 2 page Wizard. The first page asks you to > type in the primary key of a table. If that row already exists in the > table, the second page gets loaded with the rest of that row's data. So, > in > summary, the first page of the wizard should be able to populate the > second > page. > > But here's my problem: The first page only populates the 2nd page if I > haven't visited the second page yet. If, on the second page, I click the > "previous" button and then pick a new primary key, when I visit the 2nd > page > again, the input fields are not updated. I've used the debugger to see > that > the Model Object *is* being updated. > > I can't figure out why this is happening. I only use PropertyModels > (those > are dynamic models, right?). I can only guess that the Wizard serializes > the steps you've visited and doesn't check if the model has changed when > you > go back to them. > > One last thing that may be revealing: One of the things that second page > displays is a listview of fields. If the second primary key I pick has > more > items in the list than the first one, the extra items do get populated on > the page. IE: First pk has 3 items. Second pk has 4 items. The second > page will have the correct 4th item in the list but the first 3 will be of > the first pk. > > Here is my code in a pastebin: http://pastebin.org/26606 > > Here is my code inlined into the email: > > package com.haverlocke.tellah.web.component; > > import com.haverlocke.tellah.model.dao.WebsiteDao; > import com.haverlocke.tellah.model.dao.WebsiteHistoryDao; > import com.haverlocke.tellah.model.dto.LinkDto; > import com.haverlocke.tellah.model.dto.WebsiteDto; > import com.haverlocke.tellah.web.model.TellahUrlValidator; > import com.haverlocke.tellah.web.page.HomePage; > import com.haverlocke.tellah.web.util.SimilarWebsiteUtil; > import com.haverlocke.tellah.web.component.recaptcha.ReCaptchaPanel; > import net.databinder.components.AjaxOnKeyPausedUpdater; > import org.apache.wicket.ajax.AjaxRequestTarget; > import org.apache.wicket.ajax.markup.html.form.AjaxButton; > import org.apache.wicket.behavior.HeaderContributor; > import org.apache.wicket.extensions.wizard.Wizard; > import org.apache.wicket.extensions.wizard.WizardModel; > import org.apache.wicket.extensions.wizard.WizardStep; > import org.apache.wicket.feedback.FeedbackMessage; > import org.apache.wicket.feedback.IFeedbackMessageFilter; > import org.apache.wicket.markup.html.basic.Label; > import org.apache.wicket.markup.html.form.Form; > import org.apache.wicket.markup.html.form.TextArea; > import org.apache.wicket.markup.html.form.TextField; > import org.apache.wicket.markup.html.panel.FeedbackPanel; > import org.apache.wicket.model.PropertyModel; > import org.apache.wicket.model.IModel; > import org.apache.wicket.spring.injection.annot.SpringBean; > import org.apache.wicket.PageParameters; > import org.apache.wicket.Component; > > import java.util.List; > > /** > * @author Daniel Kaplan > * @since 7.10.5 > */ > public class SubmitWizard extends Wizard { > > private static final String PUBLIC_DEV = "fake"; > private static final String PRIVATE_DEV = "fake"; > > @SpringBean > private WebsiteDao websiteDao; > > @SpringBean > private WebsiteHistoryDao websiteHistoryDao; > > private WebsiteDto websiteDto = new WebsiteDto(); > private Label note; > private String noteString; > private boolean insert; > > public SubmitWizard(String id, PageParameters pp) { > super(id, false); > > insert = pp.getString("websiteName") == null || > "".equals(pp.getString("websiteName")); > > WizardModel model = new WizardModel(); > model.add(new WebsiteName()); > > WebsiteDetails websiteDetails = new WebsiteDetails(); > model.add(websiteDetails); > > init(model); > > websiteDetails.addReCaptchaPanel(); > > initPage(pp.getString("websiteName")); > } > > @Override > public void onFinish() { > new WizardFinishedAction(new PropertyModel(this, "websiteDto"), > getPage()).onSubmit(); > } > > @Override > public void onCancel() { > setRedirect(true); > setResponsePage(HomePage.class); > } > > @Override > protected FeedbackPanel newFeedbackPanel(String id) { > return new FeedbackPanel(id, new IFeedbackMessageFilter() { > public boolean accept(FeedbackMessage message) { > //never show anything. We show all messages in a > different > panel defined in the WizardPage.java > return false; > } > }); > } > > private class WebsiteName extends WizardStep { > > public WebsiteName() { > > add(HeaderContributor.forCss("images/submit.css")); > > if (insert) { > add(new Label("formHeader", "Set the name")); > } else { > add(new Label("formHeader", "Edit the name")); > } > > TextField name = new TextField("name", new > PropertyModel(websiteDto, "name")); > add(name.setRequired(true).add(new WebsiteLoadBehavior())); > > note = new Label("note", new PropertyModel(SubmitWizard.this, > "noteString")); > add(note.setOutputMarkupId(true)); > } > } > > private class WebsiteDetails extends WizardStep { > > public WebsiteDetails() { > > add(HeaderContributor.forCss("images/submit.css")); > > if (insert) { > add(new Label("formHeader", "Set the details")); > } else { > add(new Label("formHeader", "Edit the details")); > } > > TextField url = new TextField("url", new > PropertyModel(websiteDto, "url")); > add(url.add(new TellahUrlValidator(new String[]{"http", > "https"})) > .setOutputMarkupId(true)); > > TextArea idea = new TextArea("idea", new > PropertyModel(websiteDto, "whatItDoes")); > add(idea.setOutputMarkupId(true)); > > TextArea revenueSource = new TextArea("revenueSource", new > PropertyModel(websiteDto, "revenueSource")); > add(revenueSource.setOutputMarkupId(true)); > > TagArea tagArea = new TagArea("tags", websiteDto); > add(tagArea.setOutputMarkupId(true)); > > AjaxButton addSimilarButton = new AjaxButton("addSimilar") { > protected void onSubmit(AjaxRequestTarget target, Form > form) > { > SubmitWizard.this.websiteDto.getSimilarTos().add(""); > target.addComponent(form); > } > }; > > add(addSimilarButton.setDefaultFormProcessing(false).setOutputMarkupId(true) > ); > > SimilarToList similarToList = new > SimilarToList("similarToList", > new PropertyModel(websiteDto, "similarTos")); > add(similarToList.setOutputMarkupId(true)); > > AjaxButton addLinkButton = new AjaxButton("addLink") { > protected void onSubmit(AjaxRequestTarget target, Form > form) > { > SubmitWizard.this.websiteDto.getLinks().add(new > LinkDto()); > target.addComponent(form); > } > }; > > add(addLinkButton.setDefaultFormProcessing(false).setOutputMarkupId(true)); > > LinkList linkList = new LinkList("linkList", new > PropertyModel(websiteDto, "links")); > add(linkList.setRenderBodyOnly(true)); > > WebsiteHistoryPanel websiteHistoryPanel = new > WebsiteHistoryPanel("websiteHistoryPanel", new PropertyModel(this, > "websiteDto")); > add(websiteHistoryPanel.setOutputMarkupPlaceholderTag(true)); > > websiteHistoryPanel.setVisible(websiteHistoryDao.isHistory(websiteDto.getNam > e())); > } > > /** > * We need to do this separately from the constructor because the > getForm() > * doesn't work until after Wizard#init(model); is called > */ > public void addReCaptchaPanel() { > add(new ReCaptchaPanel("recaptcha", false, PUBLIC_DEV, > PRIVATE_DEV, "Invalid Captcha", getForm())); > } > } > > private class WebsiteLoadBehavior extends AjaxOnKeyPausedUpdater { > > protected void onUpdate(AjaxRequestTarget target) { > initPage(websiteDto.getName()); > > target.addComponent(note); > } > } > > private void initPage(String websiteName) { > if (websiteName != null) { > WebsiteDto ws = websiteDao.getWebsite(websiteName); > if (ws != null) { > websiteDto.become(ws); > } > } > updateNoteString(); > > websiteDto.removeEmptyLinks(); > websiteDto.getLinks().add(new LinkDto()); > > websiteDto.removeEmptySimilarTos(); > websiteDto.getSimilarTos().add(""); > } > > public void updateNoteString() { > if (websiteDto != null && websiteDto.getName() != null) { > List<String> similars = > websiteDao.getSimilarNames(websiteDto.getName()); > noteString = > SimilarWebsiteUtil.getSimilarWebsiteMessage(similars); > } else { > noteString = ""; > } > } > > public WebsiteDto getWebsiteDto() { > return websiteDto; > } > > public void setWebsiteDto(WebsiteDto websiteDto) { > this.websiteDto = websiteDto; > } > > public String getNoteString() { > return noteString; > } > > public void setNoteString(String noteString) { > this.noteString = noteString; > } > } > > > --------------------------------------------------------------------- > To unsubscribe, e-mail: users-unsubscr...@wicket.apache.org > For additional commands, e-mail: users-h...@wicket.apache.org > > > --------------------------------------------------------------------- > To unsubscribe, e-mail: users-unsubscr...@wicket.apache.org > For additional commands, e-mail: users-h...@wicket.apache.org > > > -- View this message in context: http://www.nabble.com/Wizard-seems-to-cache-pages-even-on-model-change-tp16430452p21838034.html Sent from the Wicket - User mailing list archive at Nabble.com. --------------------------------------------------------------------- To unsubscribe, e-mail: users-unsubscr...@wicket.apache.org For additional commands, e-mail: users-h...@wicket.apache.org