I forgot to include the HomePage.html.  Here is all the files of my small
test.  Please check it out if possible.  If you run it with JS off, all is
fine.  With JS on, Ajax response is wrong.

HomePage.html:

<html>
<head></head>
    <span wicket:id="message">message will be here</span>
    <form wicket:id="form">
        <input type="text" wicket:id="word"/>
        <input type="submit" value="Enter" wicket:id="submitButton"/>
    </form>
    <span wicket:id="feedback">FEEDBACK</span>
</html>

HomePage.java:

public class HomePage extends WebPage {

    private static final long serialVersionUID = 1L;

    private String word;

    public HomePage(final PageParameters parameters) {

        add(new FeedbackPanel("feedback") {
            private static final long serialVersionUID = 1L;
            @Override protected void onBeforeRender() {
                System.out.println("= = = = FeedbackPanel
onBeforeRender()");
                   System.out.println("         FeedbackbackMessageModel = "
+ getFeedbackMessagesModel().getObject());
                super.onBeforeRender();
            }
        }.setOutputMarkupPlaceholderTag(true));
        // if the word "blowup" is entered,
        //this register a error message and throw
        IModel model = new Model() {
            private static final long serialVersionUID = 1L;
            @Override public Object getObject() {
                if (word != null && word.equals("blowup")) {
                    word = "-w-e-b-l-e-w-u-p-";
                    HomePage.this.fatal("[2/2]This message is from Model.");
                    getPage().detach();
                    System.out.println("! ! ! ! ! throwing  new
AbstractRestartResponseException()");
                    throw new AbstractRestartResponseException() {
                        private static final long serialVersionUID = 1L;
                    };
                } else {
                    return "The word is: \"" + (word == null ? " n u l l " :
word) + "\"";
                }
            }
        };
        add(new Label("message", model) {
            private static final long serialVersionUID = 1L;
            @Override protected void onBeforeRender() {
                System.out.println("= = = = Label onBeforeRender(), model =
" + getModel().getObject());
                super.onBeforeRender();
            }
        }.setOutputMarkupId(true));
        Form form = new Form("form", new CompoundPropertyModel(this));
        add(form);
        form.add(new TextField("word").setRequired(true));
        AjaxFallbackButton submitButton = new
AjaxFallbackButton("submitButton", form) {
            private static final long serialVersionUID = 1L;
            @Override protected void onSubmit(AjaxRequestTarget target, Form
f) {
                if (word != null && word.equals("blowup")) {
                    HomePage.this.error("[1/2]This message is from onSubmit.
There should also be a message from model");
                }
                if (target != null) {
                    target.addComponent(HomePage.this.get("feedback"));
    // clear error feedback if any
                    target.addComponent(HomePage.this.get("message"));
                }
            }

            @Override protected void onError(AjaxRequestTarget target, Form
f) {
                target.addComponent(HomePage.this.get("feedback"));
// show updated error feedback
            }
        };
        form.add(submitButton);
    }
}



WicketApplication.java:

public class WicketApplication extends WebApplication
{
    public WicketApplication() {
    }

    public Class<? extends WebPage> getHomePage() {
        return HomePage.class;
    }


    @Override public RequestCycle newRequestCycle(Request request, Response
response) {
        return new WebRequestCycle(this, (WebRequest) request, (WebResponse)
response) {
            @Override public Page onRuntimeException(Page page,
RuntimeException e) {
                // page can be null
                if (page == null) {
                    return super.onRuntimeException(page, e);
                }
                return page;
            }
        };
    }

}

Reply via email to