Here is the code of a page that can simulate the problem:

The java source:

import wicket.markup.html.WebPage;
import wicket.markup.html.basic.Label;
import wicket.markup.html.form.Button;
import wicket.markup.html.form.Form;
import wicket.markup.html.form.TextField;
import wicket.model.IModel;
import wicket.model.Model;

public class TestPage extends WebPage {
        private static final long serialVersionUID = 1L;

        @SuppressWarnings("serial")
        public TestPage() 
        {
                super();

                Form form = new Form(this,"form");
                new TextField<String>(form,"input",new
Model<String>()).setVersioned(true);
                new Button<String>(form,"ok") {
                        public void onSubmit() {
                        }                       
                };              
                new Button<Object>(form,"previous") {
                        public void onSubmit() {
                                
getPage().getVersion(getPage().getCurrentVersionNumber()-1);
                        }                       
                };

                IModel<Integer> outputModel = new IModel<Integer>() {
                        public Integer getObject() {
                                return(getPage().getCurrentVersionNumber());
                        }
                        public void setObject(Integer object) {}
                        public void detach() {}
                };
                new Label(this,"output",outputModel);
        }
}

the markup:
<html>
    <head>
        <title>TestPage</title>
   </head>
    <body>
    <h1>TestPage</h1>
    <form wicket:id="form">
    <input type="text" wicket:id="input"></input>
    <button wicket:id="ok" type=submit>OK</button>
    <button wicket:id="previous" type=submit>Previous</button>
    </form> 
    Version: <span wicket:id="output"></span>
         </body>
</html>

The problem occurs whenever you change the value of the input field, and
hits the Previous button.
If you created 3 versions already, it will render the contents of the
version 1 with versionnumber 2.
And if you hit the Previous buton once again, it will render the contents of
version 3 with versionnumber 1 (this last one because it finally called
endVersion after the undo, saving the pending changeList).

So you are telling me I cannot call getVersion(oldVersionNumber) on a page
while the flag FLAG_NEW_VERSION is true ? I cannot read this flag from
outside. If what I do is wrong, shouldn't there be some protection against
this type of erroneous usage ?

Jan.


Johan Compagner wrote:
> 
>>
>> * each time beginVersion is called, the versionNumber is incremented and
>> a
>> new changeList is created. But that new changeList is NOT added to the
>> stack
>> of changeLists.
> 
> 
> yes thats right that is done in the endVersion() call.
> Adding it before hand shouldn't make any sense.
> 
> 
> * when getVersion(int versionNumber) is called with an older versionNumber
>> after a call to beginVersion() and before a call to endVersion(), the
>> undo()
>> method is called, which pops the last changeList from the stack and
>> decrements the versionNumber. Since the 'current' changeList is not yet
>> on
>> the stack, it pops one more changeList from the stack than it should.
> 
> 
> This is really really wrong. This should never be possible
> How does it happens that that call to getVersion() is done twice at the
> same
> time??
> A page shouldn't be accesses more then once (at the same time)
> 
> 
> Something to be corrected ? Mayby the newly created changeList should be
>> added to the stack immediately ? Or is it more correct to not increment
>> the
>> versionNumber until the call to endVersion() ?
> 
> 
> 
> No it shouldn't because when happens then if the second call did happen
> for
> an old version?
> And another request is happening at the same time for another?
> Thats really bad, shouldn't happen at anytime. So if you have a test case
> for that then
> i would really like to see it.
> 
> johan
> 
> 

-- 
View this message in context: 
http://www.nabble.com/Single-page-applications%3A-bad-idea-in-Wicket---tf3182341.html#a8850275
Sent from the Wicket - Dev mailing list archive at Nabble.com.

Reply via email to