The WizardStep has to keep the previous content...even though the underline model has been updated...I think this may be the reason. I end up with 2 textfields in the 2nd step, depends on the 1st step, either hide of show the textfields.
rtow wrote: > > 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:[email protected]] >> Sent: Tuesday, April 01, 2008 11:07 AM >> To: [email protected] >> 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: [email protected] >> For additional commands, e-mail: [email protected] >> >> >> --------------------------------------------------------------------- >> To unsubscribe, e-mail: [email protected] >> For additional commands, e-mail: [email protected] >> >> >> > > -- View this message in context: http://www.nabble.com/Wizard-seems-to-cache-pages-even-on-model-change-tp16430452p21944073.html Sent from the Wicket - User mailing list archive at Nabble.com. --------------------------------------------------------------------- To unsubscribe, e-mail: [email protected] For additional commands, e-mail: [email protected]
