Yervand Aghababyan
Yervand Aghababyan

Reputation: 1140

GWT Place objects

I'm new to GWT so this may be a dumb question but I didn't find a good answer to it anywhere.

So, how should I create Place objects in GWT? Should I create them as finals in my ClientFactory and reuse them everywhere? the Place objects Eclipse generates eat a string token as their parameter what should it be?

My Understanding is the following: I should create final Place objects in my ValueChangeHandler for those pages that are static and reuse them everywhere. Those 'Place's that are relatively dynamic should be created like

new MyCoolPlace("MyCoolPlace" + someRandomNumber)

but isn't it kind of dumb using random numbers each time i need to navigate to a new page? also will the history be cleared of the objects which i created say hours ago?

Currently I have a problem with figuring out how this mechanism works: I have a form. For, say, adding vegetables to the DB 1. User fills it 2. Submits it 3. Gets to a thank you page 4. Clicks a link in the menu to add a new vegetable 5. Gets to the form but it's already pre-filled with the values user previously entered.

I need the form clean on step 5. But if the user clicks the browser's back button on step 3 I want it to be pre-filled.

Upvotes: 1

Views: 736

Answers (1)

helios
helios

Reputation: 13841

Question about final:

I think not. They are lightweight objects and places can have values into them. They are not a limited set of places values (at least if you parametrize them).

Question about form values:

The normal behaviour is when yo go back to -let's say- "vegForm" you obtain the clean view (it's because your URL token is simple vegForm). What happens I think it's you're reusing your view without initializing. Your presenter (or whatever has the UI logic) should obtain the view and call "reset()" "init()" or whatever you want.

If you want to hold your values when you go back you should save them in your place object. It is: field values. And your PlaceTokenizer (the object that transform between URL and Place object) should take care of them. By example: vegForm/potato,green,... (don't remember the standard notation).

The problem is how do you save into the URL the values you entered before clicking Save?

What I'd do is "saving" that state into the URL before saving:

History.newItem("vegForm/potato,green,...", false);

And that will get into the history stack. When I say false it means that the GWT History mechanism should not react to that URL avoiding loading the view again. When your user clicks back she should go back to form(with values). If your user clicks back again the she should go back to form(clean).

By example:

User clicks add veg -> #vegForm
User fills data and pless save
   -> #vegForm/value1,value2 (saved in History with false argument)
   -> #okPage

User clicks back
   -> #vegForm/value1,value2 (form with saved data)
User clicks back
   -> #vegForm (form without)

Initialization

Take into account you always must initialize the view.

  • If you don't have params, to clean it (it can be a reused view)
  • If you have params, to fill the form with them

Upvotes: 3

Related Questions