[ 
https://issues.apache.org/jira/browse/WICKET-1450?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
 ]

Martijn Dashorst reopened WICKET-1450:
--------------------------------------


The unit tests fail after this issue was fixed. I'm not sure if the unit tests 
fail because this issue was fixed wrong, or that the test has a bug, or that 
the test tests the wrong thing.

This issue is now blocking 1.3.5

> Ajax Re-render does not work after AbstractRestartResponseException()
> ---------------------------------------------------------------------
>
>                 Key: WICKET-1450
>                 URL: https://issues.apache.org/jira/browse/WICKET-1450
>             Project: Wicket
>          Issue Type: Bug
>          Components: wicket
>    Affects Versions: 1.3.2
>         Environment: Windows XP Java 1.6.0_05-b13
>            Reporter: Matthew Young
>            Assignee: Johan Compagner
>             Fix For: 1.3.5
>
>
> To handle possible exception in Model#getObject(): I do
> 1) make note of exception has occurred (and subsequently only return some 
> error value and not cause exception thrown again),
> 2) register an error feedback message,
> 3) calll page.detach()  (for clean up and reset?, I'm not sure but I know 
> this makes FeedbackPanelErrorMessage reload message from session) and
> 4) throw new AbstractRestartResponseException() to re-render response with 
> the new error message from the model shown.
> I'm finding that this works perfectly in non-Ajax.  But in Ajax, there are 2 
> problems:
> 1) the error message register in step 2) above is not rendered in the 
> FeedbackPanel
> 2) the Ajax response is incomplete, it's missing the label component in my 
> test case and missing the </ajax-response> closing tag.
> Test case below:  if you enter "blowup" in the text field, the label's model 
> will do the steps outline above.  Run this in non-Ajax and you will see two 
> error messages as expected.  Run in Ajax, you will see the problem (open 
> Wicket Ajax Debug panel to see).
> = = = =     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;
>                       }
>               };
>       }
> }

-- 
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.

Reply via email to