рдЬрдм рдореИрдВрдиреЗ
GWT рдореЗрдВ RPC рдХреЙрд▓ рдХреЗ рдЖрдпреЛрдЬрди рдХреЗ рд▓рд┐рдП рдХрдорд╛рдВрдб рдЯреЗрдореНрдкреНрд▓реЗрдЯ рдХрд╛ рдЙрдкрдпреЛрдЧ
рдХрд░рдиреЗ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдПрдХ рд╡рд┐рд╖рдп рд▓рд┐рдЦрд╛
, рддреЛ рдореИрдВрдиреЗ GWT рдкреНрд░реЛрдЬреЗрдХреНрдЯреНрд╕ рдХреА рд╡рд╛рд╕реНрддреБрдХрд▓рд╛ рдХреЗ рдирд┐рд░реНрдорд╛рдг рдХреЗ рд▓рд┐рдП MVP рдкреИрдЯрд░реНрди рдХрд╛ рдЙрд▓реНрд▓реЗрдЦ рдХрд┐рдпрд╛ред рдХреЙрдорд░реЗрдб рд░реЗ рд░реЗрдпрд╛рди рдиреЗ рдЬреАрдбрдмреНрд▓реНрдпреВрдЯреА рдкрд░ рдЬрдЯрд┐рд▓ рдЕрдиреБрдкреНрд░рдпреЛрдЧреЛрдВ рдХреЛ рдбрд┐рдЬрд╛рдЗрди рдХрд░рдиреЗ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрд╛рдд рдХрд░рдиреЗ рдХреЗ рддреБрд░рдВрдд рдмрд╛рдж, рджреБрдирд┐рдпрд╛ рднрд░ рдХреЗ рд╢реНрд░рдорд┐рдХреЛрдВ рдиреЗ рдкреБрд╕реНрддрдХрд╛рд▓рдпреЛрдВ рдФрд░ рд░реВрдкрд░реЗрдЦрд╛ рдХреЗ рд░реВрдк рдореЗрдВ рдЖрд╡рд╛рдЬ рд╡рд╛рд▓реЗ рд╡рд┐рдЪрд╛рд░реЛрдВ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдирд╛ рд╢реБрд░реВ рдХрд░ рджрд┐рдпрд╛ред рдЗрди рдХрд╛рд░реНрдпреЛрдВ рдХрд╛ рдкрд░рд┐рдгрд╛рдо MVP рджреГрд╖реНрдЯрд┐рдХреЛрдг (
GWT- рдкреНрд░рд╕реНрддреБрддрдХрд░реНрддрд╛ ) рдФрд░ рдЗрд╕рдХреЗ рдкреВрд░реЗ (
Mvp4G ) рдХреЗ рджреЛрдиреЛрдВ рдкрд╣рд▓реБрдУрдВ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХрд╛ рд╕рд╛рдзрди рдерд╛ред рдпрд╣ рд╕рдм рдЕрджреНрднреБрдд рд╣реИ, рд▓реЗрдХрд┐рди рдореИрдВ рд╡реНрдпрдХреНрддрд┐рдЧрдд рд░реВрдк рд╕реЗ (рдореБрдЭреЗ рдпрдХреАрди рд╣реИ рдХрд┐ рдмрд╛рдХреА рдЬреАрдбрдмреНрд▓реНрдпреВрдЯреА рдбреЗрд╡рд▓рдкрд░реНрд╕) рдХреЛ рдПрдорд╡реАрдкреА рдпреЛрдЬрдирд╛ рдХреЗ рдЕрдиреБрд╕рд╛рд░ рдЬреАрдбрдмреНрд▓реНрдпреВрдЯреА рдЕрдиреБрдкреНрд░рдпреЛрдЧреЛрдВ рдХреЗ рдЖрдпреЛрдЬрди рдХреЗ рд▓рд┐рдП рдПрдХ рдорд╛рдирдХреАрдХреГрдд (рдЕрдЧрд░ рдореИрдВ рдРрд╕рд╛ рдХрд╣ рд╕рдХрддрд╛ рд╣реВрдВ) рдврд╛рдВрдЪрд╛ / рджреГрд╖реНрдЯрд┐рдХреЛрдг рдХрд░рдирд╛ рдЪрд╛рд╣реВрдВрдЧрд╛ред рдФрд░ рдЕрдм рдЬреЛ рдЯреАрдо Google рдкрд░ GWT рдХреЗ рд▓рд┐рдП рдЬрд┐рдореНрдореЗрджрд╛рд░ рд╣реИ, рдЕрдВрдд рдореЗрдВ рд╕рдВрд╕реНрдХрд░рдг 2.1 рдореЗрдВ, рдмрд╛рдХреА рд╕реНрд╡рд╛рджрд┐рд╖реНрдЯ рдорд╛рд▓ рдХреЗ рд╕рд╛рде, рдПрдХ рдЕрдВрддрд░реНрдирд┐рд╣рд┐рдд MVP рдврд╛рдВрдЪреЗ рдХреА рдкреЗрд╢рдХрд╢ рдХреАред
рдЗрд╕ рд▓реЗрдЦ рдореЗрдВ, рдореИрдВ рдЕрдВрддрд░реНрдирд┐рд╣рд┐рдд GWT MVP рдлреНрд░реЗрдорд╡рд░реНрдХ рдХреЗ рдореБрдЦреНрдп рдмрд┐рдВрджреБрдУрдВ рдХреЛ рдЙрдЬрд╛рдЧрд░ рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░реВрдВрдЧрд╛ред рдПрдХ рдЙрджрд╛рд╣рд░рдг рдХреЗ рд░реВрдк рдореЗрдВ, рдЗрд╕ рджреГрд╖реНрдЯрд┐рдХреЛрдг рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдмрдирд╛рдпрд╛ рдЧрдпрд╛ рдПрдХ рдЫреЛрдЯрд╛ рдЕрдиреБрдкреНрд░рдпреЛрдЧ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред
рдпрд╣ рд▓реЗрдЦ рдПрдХ рдирд┐рдГрд╢реБрд▓реНрдХ рдкрде (
GWT MVP рд╡рд┐рдХрд╛рд╕ ) рд╣реИ рдФрд░ рдпрд╣ рдХрд┐рд╕реА рднреА рддрд░рд╣ рд╕реЗ рдЕрджреНрд╡рд┐рддреАрдп рд╣реЛрдиреЗ рдХрд╛ рджрд┐рдЦрд╛рд╡рд╛ рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИред рдЕрдЧрд░ рдХрд┐рд╕реА рдХреЛ рдЗрд╕ рддрд░рд╣ рдХреЗ рдПрдХ рдмрдбрд╝реЗ рдкрд░рд┐рдЪрдп рдореЗрдВ рджрд┐рд▓рдЪрд╕реНрдкреА рдереА
рдореИрдВ рддреБрд░рдВрдд рдХрд╣реВрдВрдЧрд╛ рдХрд┐ рдореИрдВ рдПрдорд╡реАрдкреА рдбрд┐рдЬрд╛рдЗрди рдкреИрдЯрд░реНрди рдкрд░ рд╣реА рдзреНрдпрд╛рди рдХреЗрдВрджреНрд░рд┐рдд рдирд╣реАрдВ рдХрд░реВрдВрдЧрд╛ред рдЖрдк рдЕрдкрдиреЗ рдЖрдк рдХреЛ рдЗрд╕рдХреА рдпреЛрдЬрдирд╛ рд╕реЗ рдкрд░рд┐рдЪрд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, (
рдПрдорд╡реАрдкреА рд╡рд┐рдХреА рдкрд░ )ред % рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдирд╛рдо% рдмреНрдпрд╛рдЬ рдХреЗ рд▓рд┐рдП, рдореИрдВ рдЙрд╕ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХрд╛ рд╕реНрдХреНрд░реАрдирд╢реЙрдЯ рджреВрдВрдЧрд╛ рдЬрд┐рд╕реЗ рдореИрдВрдиреЗ рд╕рдорд╛рдкреНрдд рдХрд┐рдпрд╛ рдерд╛ред

рд╣рд╛рдВ, рдореИрдВ рд╕рдордЭрддрд╛ рд╣реВрдВ рдХрд┐ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреБрдЫ рднреА рдЙрдкрдпреЛрдЧреА рдирд╣реАрдВ рд╣реИ, рд▓реЗрдХрд┐рди рдЗрд╕рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рдореИрдВ рд╡рд╛рд╕реНрддреБрдХрд▓рд╛ рдХреЛ рдЕрд▓рдЧ-рдЕрд▓рдЧ рд╕реНрд╡рддрдВрддреНрд░ рднрд╛рдЧреЛрдВ (рдореЗрд▓, рд╕рдВрдкрд░реНрдХ рдФрд░ рдХрд╛рд░реНрдп, рдЬрд┐рд╕ рддрд░рд╣ рд╕реЗ, рдмрд╕ рдЫрдд рд╕реЗ рд▓рд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ) рдореЗрдВ рд╡рд┐рднрд╛рдЬрд┐рдд рдХрд░рдиреЗ рдХрд╛ рддрд░реАрдХрд╛ рджрд┐рдЦрд╛рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░реВрдВрдЧрд╛, рдЙрдирдХреЗ рдмреАрдЪ рд╕реНрд╡рд┐рдЪрд┐рдВрдЧ рдФрд░ рд╕рдВрдЪрд╛рд░ рд╡реНрдпрд╡рд╕реНрдерд┐рдд рдХрд░реЗрдВред GWT 2.1 рдореЗрдВ рдирд┐рд░реНрдорд┐рдд рддрдВрддреНрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдПрдорд╡реАрдкреА рдкреИрдЯрд░реНрди рдХрд╛ рдПрдо-рдШрдЯрдХ, рдЕрд░реНрдерд╛рддреНред рдореЙрдбрд▓, рдХреНрдпреЛрдВрдХрд┐ рдЙрджрд╛рд╣рд░рдг рдХреЗ рдкреНрд░рдпреЛрдЬрдиреЛрдВ рдХреЗ рд▓рд┐рдП рдЖрд╡реЗрджрди рдореЗрдВ рдХреЛрдИ рдбреЗрдЯрд╛ рдмрд╛рдЗрдВрдбрд┐рдВрдЧ рдирд╣реАрдВ рд╣реИред
рдПрдВрдмреЗрдбреЗрдб рдПрдорд╡реАрдкреА рдХреА рдореБрдЦреНрдп рд╡рд┐рд╢реЗрд╖рддрд╛рдПрдВ
рдЬреАрд╡реАрдЯреА рдЯреАрдо рдиреЗ рдПрдорд╡реАрдкреА рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реБрдП рдПрдХ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЗ рдирд┐рд░реНрдорд╛рдг рдХреЗ рд▓рд┐рдП рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдкреНрд░рдореБрдЦ рдШрдЯрдХреЛрдВ рдХрд╛ рдкреНрд░рд╕реНрддрд╛рд╡ рджрд┐рдпрд╛:
- рдЧрддрд┐рд╡рд┐рдзрд┐ - рд╢рд╛рд╕реНрддреНрд░реАрдп рджреГрд╖реНрдЯрд┐рдХреЛрдг рдореЗрдВ, рдпрд╣ рдкреНрд░рд╕реНрддреБрддрдХрд░реНрддрд╛ рд╣реИред рд╡рд░реНрддрдорд╛рди рдореЗрдВ рдЦреБрд▓реЗ рджреГрд╢реНрдп рдХреЗ рддрд░реНрдХ рдХреЗ рд▓рд┐рдП рдЬрд┐рдореНрдореЗрджрд╛рд░ред рдЗрд╕рдореЗрдВ рдХреЛрдИ GWT рд╡рд┐рдЬреЗрдЯ рдпрд╛ UI-рд╕рдВрдмрдВрдзрд┐рдд рдХреЛрдб рдирд╣реАрдВ рд╣реИред рд▓реЗрдХрд┐рди рдмрджрд▓реЗ рдореЗрдВ, рдпрд╣ рдПрдХ рд╕рдВрдмрджреНрдз рджреГрд╢реНрдп рд╡рд╕реНрддреБ (рджреГрд╢реНрдп) рд╣реИред рдЧрддрд┐рд╡рд┐рдзрд┐ рдкреНрд░рдмрдВрдзрдХ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд░реВрдк рд╕реЗ рдкреНрд░рд╛рд░рдВрдн рдФрд░ рдмрдВрдж рд╣реЛ рдЬрд╛рддрд╛ рд╣реИ
- рдПрдХреНрдЯрд┐рд╡рд┐рдЯреА рдореИрдирдЬрд░ рдПрдХ рдмрд┐рд▓реНрдЯ-рдЗрди рдСрдмреНрдЬреЗрдХреНрдЯ рд╣реИ рдЬреЛ рдЗрд╕рдореЗрдВ рдкрдВрдЬреАрдХреГрдд рд╣реЛрдиреЗ рд╡рд╛рд▓реА рдЧрддрд┐рд╡рд┐рдзрд┐рдпреЛрдВ рдХреЗ рдЬреАрд╡рди рдЪрдХреНрд░ рдХреЛ рдирд┐рдпрдВрддреНрд░рд┐рдд рдХрд░рддрд╛ рд╣реИред
- рд╕реНрдерд╛рди - рд╡рд░реНрддрдорд╛рди рджреГрд╢реНрдп рдХреА рд╕реНрдерд┐рддрд┐ рдХреЗ рд▓рд┐рдП рдЬрд┐рдореНрдореЗрджрд╛рд░ред рдореВрд▓ рд░реВрдк рд╕реЗ, URL рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рджреГрд╢реНрдп рдХреА рд╕реНрдерд┐рддрд┐ рдкреНрд░рд╕рд╛рд░рд┐рдд рдХреА рдЬрд╛рддреА рд╣реИ (рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, ID = <so-> рд╕рдВрдкрд╛рджрди рдХреЗ рд▓рд┐рдП) рдпрд╛ рдХрд┐рд╕реА рдЕрдиреНрдп рддрд░реАрдХреЗ рд╕реЗ, рдЗрддрд┐рд╣рд╛рд╕ рдЯреЛрдХрди рдХреЗ рд╕рд╛рде рдПрдХ рд╕рдВрдкрд░реНрдХ рдЦреЛрд▓реЗрдВред PlaceHistoryHandler рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рдж, рдЬреЛ рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдХреЗ рдПрдбреНрд░реЗрд╕ рдмрд╛рд░ рдореЗрдВ рдкрд░рд┐рд╡рд░реНрддрди рдХреЗ рд▓рд┐рдП "рд╕реБрдирддрд╛ рд╣реИ", рдкреНрд▓реЗрд╕ рдСрдмреНрдЬреЗрдХреНрдЯ рдХреА рд╡рд╛рдВрдЫрд┐рдд рд╕реНрдерд┐рддрд┐ рдХреЛ рдлрд┐рд░ рд╕реЗ рдмрдирд╛рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдХрд┐рд╕реА рдкреНрд▓реЗрд╕ рдСрдмреНрдЬреЗрдХреНрдЯ рдХреА рд╕реНрдерд┐рддрд┐ рдХреЛ рдлрд┐рд░ рд╕реЗ рд╕рдВрдЧрдард┐рдд рдпрд╛ рд╕рд╣реЗрдЬрддреЗ рд╕рдордп, рдкреНрд▓реЗрд╕рдЯреЙрдХреЗрдирд╛рдЗрдЬрд╝рд░ рдСрдмреНрдЬреЗрдХреНрдЯ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЬрд┐рд╕рдореЗрдВ рд╡рд░реНрдгрд┐рдд рдСрдмреНрдЬреЗрдХреНрдЯ рдХреА рд╕реНрдерд┐рддрд┐ рдХреЛ рдлрд┐рд░ рд╕реЗ рд╕рдВрдЧрдард┐рдд рдФрд░ рд╕рд╣реЗрдЬрддреЗ рд╕рдордп рддрд░реАрдХреЛрдВ рдХреЛ рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИред
- PlaceHistoryMapper, ActivityMapper - рдореИрдкрд░ рдХреНрд▓рд╛рд╕реЗрд╕, рдЬреЛ рд╕рднреА рдкреНрд▓реЗрд╕ рдФрд░ рдПрдХреНрдЯрд┐рд╡рд┐рдЯреАрдЬрд╝ рдХреЗ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЛ рд░рдЬрд┐рд╕реНрдЯрд░ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЕрдирд┐рд╡рд╛рд░реНрдп рд░реВрдк рд╕реЗ рдЬрд┐рдореНрдореЗрджрд╛рд░ рд╣реИрдВред рдкрд╛рд╕ рдкреНрд▓реЗрд╕ рдкреНрд▓реЗрд╕ рдСрдмреНрдЬреЗрдХреНрдЯ (рдЬреЛ рдмрджрд▓реЗ рдореЗрдВ рдЗрддрд┐рд╣рд╛рд╕ рдЯреЛрдХрди рд╕реЗ рдлрд┐рд░ рд╕реЗ рдмрдирд╛рдпрд╛ рдЧрдпрд╛ рдерд╛) рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рдПрдХреНрдЯрд┐рд╡рд┐рдЯреА рдореЗрдкрд░ рднреА рддрдп рдХрд░рддрд╛ рд╣реИ рдХрд┐ рдХреМрди рд╕реА рдПрдХреНрдЯрд┐рд╡рд┐рдЯреА рдСрдмреНрдЬреЗрдХреНрдЯ рд╕рдВрдмрдВрдзрд┐рдд URL рд╕реНрдерд┐рддрд┐ рд╕реЗ рд╕рдВрдмрджреНрдз рд╣реЛрдЧреА
- рджреГрд╢реНрдп - рд╕рд░рд▓ рд╕рдордЧреНрд░ рд╡рд┐рдЬреЗрдЯ рдЬреЛ рдЕрдиреНрдп рдиреЗрд╕реНрдЯреЗрдб рд╡рд┐рдЬреЗрдЯ рд╕реЗ рдорд┐рд▓рдХрд░ рдмрдирд╛ рд╕рдХрддреЗ рд╣реИрдВред рдЙрдирдореЗрдВ рдПрдХ рдЬреБрдбрд╝реЗ рдкреНрд░рд╕реНрддреЛрддрд╛ (рдЧрддрд┐рд╡рд┐рдзрд┐) рдХрд╛ рдПрдХ рдЙрджрд╛рд╣рд░рдг рд╣реИред рдпреВрдЖрдИ рдХреА рдЬрд╝рд░реВрд░рддреЛрдВ рдХреЗ рд▓рд┐рдП рддрд░реНрдХ рдХреЗ рдЕрд▓рд╛рд╡рд╛ рдЙрдирдХреЗ рдкрд╛рд╕ рддрд░реНрдХ рдирд╣реАрдВ рд╣реИрдВ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рд╢реИрд▓реА рд╕реНрд╡рд┐рдЪ рдХрд░рдирд╛, рдЖрджрд┐ред рд╕рднреА рдЙрдкрдпреЛрдЧреА рддрд░реНрдХ рдХрд╛ рдирд┐рд╖реНрдкрд╛рджрди рджреГрд╢реНрдп рд╕рдВрдмрдВрдзрд┐рдд рдкреНрд░рд╕реНрддреБрддрдХрд░реНрддрд╛ рдХреЛ рдЙрд╕рдХреЗ рддрд░реАрдХреЛрдВ рдХреЛ рдХреЙрд▓ рдХрд░рдХреЗ рджрд░реНрд╢рд╛рддрд╛ рд╣реИред
рдЖрдЗрдП рдЕрдм рд╣рдо рдПрдХ рдЙрджрд╛рд╣рд░рдг рдХреЗ рд░реВрдк рдореЗрдВ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдЬреАрд╡рди рдХреЛрдб рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реБрдП рд╡реНрдпрдХреНрддрд┐рдЧрдд рд░реВрдк рд╕реЗ рдЗрди рд╕рднреА рдШрдЯрдХреЛрдВ рдкрд░ рдЕрдзрд┐рдХ рд╡рд┐рд╕реНрддрд╛рд░ рд╕реЗ рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдВред рд╡реИрд╕реЗ, рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЛрдб
рдореБрдлреНрдд рдкрд╣реБрдВрдЪ рдХреЗ рд▓рд┐рдП рдЙрдкрд▓рдмреНрдз рд╣реИред рдЗрд╕рд▓рд┐рдП рдЖрдк рдЗрд╕реЗ рдкрдврд╝рддреЗ рд╣реБрдП рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВред
рджреГрд╢реНрдп рдШрдЯрдХ рдпрд╛ рджреГрд╢реНрдп
рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, рдпрд╣ рдХрд╣рдиреЗ рдпреЛрдЧреНрдп рд╣реИ рдХрд┐ рдПрдорд╡реАрдкреА рдореЗрдВ рдпрд╣ рдкреНрд░рд╕реНрддреЛрддрд╛ рдФрд░ рджреЗрдЦрдиреЗ рдХреЗ рдмреАрдЪ рдХреЗрд╡рд▓ "рд╡рд┐рдирд┐рдордп" рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдкреНрд░рдерд╛рдЧрдд рд╣реИред рдЗрд╕рд▓рд┐рдП, рдЕрдиреБрдкреНрд░рдпреЛрдЧ рдореЗрдВ рдкреНрд░рддреНрдпреЗрдХ рджреГрд╢реНрдп рдХреЗ рд▓рд┐рдП рдПрдХ рд╕рдВрдмрдВрдзрд┐рдд рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рд╣реИ
package com.gshocklab.mvp.client.mvp.view; import com.google.gwt.user.client.ui.IsWidget; public interface IMailView extends IsWidget { public void setPresenter(IMailPresenter presenter); public interface IMailPresenter { } }
рджреГрд╢реНрдп рдХрд╛ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдкреНрд░рд╕реНрддреБрддрдХрд░реНрддрд╛ рдХреЗ рд╕рдВрдЧрдд рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдХрд╛ рд╡рд░реНрдгрди рдХрд░рддрд╛ рд╣реИ, рдЬреЛ рд╕рднреА рдкреЗрд▓реЛрдб (рдбреЗрдЯрд╛ рдХреЗ рд▓рд┐рдП рдЕрдиреБрд░реЛрдз рднреЗрдЬрдирд╛, рдШрдЯрдирд╛ рдмрд╕ рд╕реЗ рдкреНрд░рд╕рдВрд╕реНрдХрд░рдг рдХреА рдШрдЯрдирд╛рдУрдВ рдЖрджрд┐) рдХрд╛ рдкреНрд░рджрд░реНрд╢рди рдХрд░реЗрдЧрд╛ред
рдЗрд╕ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдХрд╛ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рд╕рд░рд▓ рд╣реЛрдЧрд╛ рдФрд░ рдЗрд╕рдореЗрдВ рдХреЛрдИ рд╡рд┐рд╢реЗрд╖ рд╕рдорд╕реНрдпрд╛ рдирд╣реАрдВ рд╣реЛрдиреА рдЪрд╛рд╣рд┐рдПред
public class MailView extends Composite implements IMailView { interface MailViewUiBinder extends UiBinder<Widget, MailView> { } private static MailViewUiBinder uiBinder = GWT.create(MailViewUiBinder.class); private IMailPresenter presenter; public MailView() { initWidget(uiBinder.createAndBindUi(this)); } @Override public void setPresenter(IMailPresenter presenter) { this.presenter = presenter; } }
рд▓рд┐рдВрдХ рдХреА рдЧрдИ ui.xml рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рдХреЗрд╡рд▓ рдПрдХ рд╡рд┐рдЬреЗрдЯ рд╣реИ, рд╕рд╛рджреЗ рдкрд╛рда рдХреЗ рд╕рд╛рде рд▓реЗрдмрд▓ред рдЙрд╕рдХрд╛ рдХреЛрдб рд▓рд╛рдиреЗ рдХрд╛ рдХреЛрдИ рдорддрд▓рдм рдирд╣реАрдВ рд╣реИ; рдЖрдк рдЗрд╕реЗ рдкрд░рд┐рдпреЛрдЬрдирд╛ рдХреА рд╡реЗрдмрд╕рд╛рдЗрдЯ рдкрд░ рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВред
рдпрд╣ рд╕рдм рджреЗрдЦрдиреЗ рдХреЗ рд▓рд┐рдП рд╣реИред рдЕрдм рд╣рдо рдЧрддрд┐рд╡рд┐рдзрд┐ рдХреЗ рд▓рд┐рдП рдФрд░ рдЕрдзрд┐рдХ рджрд┐рд▓рдЪрд╕реНрдк рд╣реЛ рдЬрд╛рддреЗ рд╣реИрдВред
рдкреГрд╖реНрдареЛрдВ (рджреГрд╢реНрдп) рдпрд╛ рдЧрддрд┐рд╡рд┐рдзрд┐ рдХрд╛ рддрд░реНрдХ
рдмрд╛рдИрдВ рдУрд░ рдбреЗрдореЛ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдореЗрдВ рд▓рд┐рдВрдХ рдХреЗ рд╕рд╛рде рдПрдХ рдиреЗрд╡рд┐рдЧреЗрд╢рди рдмрд╛рд░ рд╣реИред рдЬрдм рдЖрдк рдЗрди рд▓рд┐рдВрдХ рдкрд░ рдХреНрд▓рд┐рдХ рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рдЖрдк рд╡рд┐рдЪрд╛рд░реЛрдВ рдХреЗ рдмреАрдЪ рд╕реНрд╡рд┐рдЪ рдХрд░рддреЗ рд╣реИрдВ рдФрд░ рд╡рд░реНрддрдорд╛рди рд▓рд┐рдВрдХ рдХреЗ рд▓рд┐рдП CSS рд╢реИрд▓реА рд╕реЗрдЯ рдХрд░рддреЗ рд╣реИрдВред рдореИрдВрдиреЗ рдЕрдореВрд░реНрдд рдЕрднрд┐рднрд╛рд╡рдХ рд╡рд░реНрдЧ AbstractMainActivity рдХреЗ рд▓рд┐рдП рдпрд╣ рдХрд╛рд░реНрд░рд╡рд╛рдИ рдХреА, рдЬреЛ рдЕрдВрддрд░реНрдирд┐рд╣рд┐рдд рд╡рд░реНрдЧ рдпреЛрдЧреНрдпрддрд╛ рдХреЗ рд╡рдВрд╢рдЬ рд╣реИ
package com.gshocklab.mvp.client.mvp.activity; public abstract class AbstractMainActivity extends AbstractActivity { private static Map<String, Element> navLinks = new LinkedHashMap<String, Element>(); static { navLinks.put(AppConstants.MAIL_LINK_ID, DOM.getElementById(AppConstants.MAIL_LINK_ID)); navLinks.put(AppConstants.CONTACTS_LINK_ID, DOM.getElementById(AppConstants.CONTACTS_LINK_ID)); navLinks.put(AppConstants.TASKS_LINK_ID, DOM.getElementById(AppConstants.TASKS_LINK_ID)); } public void applyCurrentLinkStyle(String viewId) { for (String linkId : navLinks.keySet()) { final Element link = navLinks.get(linkId); if (link == null) continue; if (linkId.equals(viewId)) { link.addClassName("b-current"); } else { link.removeClassName("b-current"); } } } }
рдФрд░ рдПрдХ рд╡рд┐рд╢рд┐рд╖реНрдЯ рдЧрддрд┐рд╡рд┐рдзрд┐ рдХрд╛ рдПрдХ рд╡рд┐рд╢рд┐рд╖реНрдЯ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди
package com.gshocklab.mvp.client.mvp.activity; public class MailActivity extends AbstractMainActivity implements IMailView.IMailPresenter { private ClientFactory clientFactory; public MailActivity(ClientFactory clientFactory) { this.clientFactory = clientFactory; } @Override public void start(AcceptsOneWidget container, EventBus eventBus) { applyCurrentLinkStyle(AppConstants.MAIL_LINK_ID); final IMailView view = clientFactory.getMailView(); view.setPresenter(this); container.setWidget(view.asWidget()); } }
рдпрд╣ рдХреИрд╕реЗ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ: рдЬрдм рдПрдХ рдПрдХреНрдЯрд┐рд╡рд┐рдЯреА рдореИрдирдЬрд░ рдХреЛ PlaceHistoryManager рд╕реЗ URL рдкрд░рд┐рд╡рд░реНрддрди рдШрдЯрдирд╛ рдкреНрд░рд╛рдкреНрдд рд╣реЛрддреА рд╣реИ, рддреЛ рдпрд╣ рдПрдХреНрдЯрд┐рд╡рд┐рдЯреАрдореИрдкрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рд╡рд╛рдВрдЫрд┐рдд рдЧрддрд┐рд╡рд┐рдзрд┐ рдЙрджрд╛рд╣рд░рдг рдмрдирд╛рддрд╛ рд╣реИ рдФрд░ рдЗрд╕реЗ рд╕реНрдЯрд╛рд░реНрдЯ () рд╡рд┐рдзрд┐ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рд╢реБрд░реВ рдХрд░рддрд╛ рд╣реИред рдЗрд╕ рдкрджреНрдзрддрд┐ рдХрд╛ рдПрдХ рдкреИрд░рд╛рдореАрдЯрд░ рдХрдВрдЯреЗрдирд░ рд╣реИ рдЬрд┐рд╕рдореЗрдВ рджреГрд╢реНрдп рд╡рд┐рдЬреЗрдЯ рдкреНрд░рддрд┐рд╕реНрдерд╛рдкрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред рд╣рдореЗрдВ рдХреНрд▓рд╛рдпрдВрдЯрдлреИрдХреНрдЯрд░реА рд╕реЗ рджреГрд╢реНрдп рдорд┐рд▓рддрд╛ рд╣реИ, рдЬреЛ рдереЛрдбрд╝рд╛ рдХрдо рд╣реЛрдЧрд╛ред рд╣рдо рдкреНрд░рд╕реНрддреБрддрдХрд░реНрддрд╛ рдХреЛ рдкреНрд░рд╛рдкреНрдд рджреГрд╢реНрдп рдЙрджрд╛рд╣рд░рдг рдореЗрдВ рдЗрдВрдЬреЗрдХреНрдЯ рдХрд░рддреЗ рд╣реИрдВ рдФрд░ рджреГрд╢реНрдп рдХреЛ рд╡рд┐рдЬреЗрдЯ рдХреЗ рд░реВрдк рдореЗрдВ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рддреЗ рд╣реИрдВред рд╣рд╛рдВ, рд▓рд┐рдВрдХ рдХреЗ рд▓рд┐рдП рдПрдХ рд╕реАрдПрд╕рдПрд╕ рдирд┐рдпрдо рднреА рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рдЬреЛ рд╡рд░реНрддрдорд╛рди рджреГрд╢реНрдп рдХреА рдУрд░ рдЬрд╛рддрд╛ рд╣реИред рд▓реЗрдХрд┐рди рдпрд╣ рд╡рд┐рд╢реБрджреНрдз рд░реВрдк рд╕реЗ рджреГрд╢реНрдп рдбрд┐рдЬрд╛рдЗрди рд╣реИред
ClientFactory рдПрдХ рд╕рд░рд▓ рдХрд╛рд░рдЦрд╛рдирд╛ рд╣реИ рдЬреЛ рд╕рд╣реА рдСрдмреНрдЬреЗрдХреНрдЯ рдмрдирд╛рддрд╛ рд╣реИред рдЗрд╕рдХрд╛ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдирд┐рдореНрдирд╛рдиреБрд╕рд╛рд░ рдмрддрд╛рдпрд╛ рдЧрдпрд╛ рд╣реИ
public interface ClientFactory { public EventBus getEventBus(); public PlaceController getPlaceController(); public IMailView getMailView(); public IContactsView getContactsView(); public ITasksView getTasksView(); }
рдЗрд╕рдХрд╛ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди "рдмреБрджреНрдзрд┐ рдФрд░ рддреНрд╡рд░рд┐рдд рдмреБрджреНрдзрд┐" рдореЗрдВ рднрд┐рдиреНрди рдирд╣реАрдВ рд╣реЛрддрд╛ рд╣реИ
public class ClientFactoryImpl implements ClientFactory { private final EventBus eventBus = new SimpleEventBus(); private final PlaceController placeController = new PlaceController(eventBus); private final IMailView mailView = new MailView(); private final IContactsView contactsView = new ContactsView(); private final ITasksView tasksView = new TasksView(); @Override public EventBus getEventBus() { return eventBus; } @Override public PlaceController getPlaceController() { return placeController; } @Override public IMailView getMailView() { return mailView; } @Override public IContactsView getContactsView() { return contactsView; } @Override public ITasksView getTasksView() { return tasksView;} }
GWT рдореЙрдбреНрдпреВрд▓ рдХреА рд╡рд┐рд╡рд░рдг рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рд╡рд░реНрдгрд┐рдд рдирд┐рдпрдо рдХреЗ рдЕрдиреБрд╕рд╛рд░ рдХреНрд▓рд╛рдЗрдВрдЯрдлрд╝реИрдХреНрдЯрд┐рд╡ рдСрдмреНрдЬреЗрдХреНрдЯ рдХреА рддрд╛рддреНрдХрд╛рд▓рд┐рдХрддрд╛ рдХреЛ Deffered рдмрд╛рдЗрдВрдбрд┐рдВрдЧ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред рд▓реЗрдХрд┐рди рдЗрд╕ рдмрд╛рд░реЗ рдореЗрдВ рдЕрдзрд┐рдХ рдмрд╛рдж рдореЗрдВ рдлрд┐рд░ рд╕реЗ рдЕрдиреБрднрд╛рдЧ рдореЗрдВ, рдЬреЛ рдПрдХрд▓ рдХрд╛рд░реНрдп рдкреНрд░рдгрд╛рд▓реА рдореЗрдВ рд╕рдВрдкреВрд░реНрдг рдПрдорд╡реАрдкреА-рдЕрд░реНрдерд╡реНрдпрд╡рд╕реНрдерд╛ рдХреЗ рд╡рд┐рдиреНрдпрд╛рд╕ рдкрд░ рдЪрд░реНрдЪрд╛ рдХрд░реЗрдЧрд╛ред рдпрд╣ рдзреНрдпрд╛рди рджреЗрдиреЗ рдпреЛрдЧреНрдп рд╣реИ рдХрд┐ рдХреНрд▓рд╛рдЗрдВрдЯрдлреИрдХреНрдЯрд┐рд╡ рд╣рд▓ рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рдХрд╛рд░реНрдпреЛрдВ рдХреЗ рд▓рд┐рдП рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдкрд░рд┐рдпреЛрдЬрдирд╛рдУрдВ рдореЗрдВ, Google GIN рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдмреЗрд╣рддрд░ рд╣реИред рдбреАрдЖрдИ рдЙрдкрдХрд░рдг рдХреЗ рдлрд╛рдпрджреЗ рдХрд╛ рд╡рд░реНрдгрди рдХрд░рдиреЗ рдореЗрдВ рдХреЛрдИ рд╕рдордЭрджрд╛рд░реА рдирд╣реАрдВ рд╣реИ, рд╡реЗ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рд╕рдордЭрдиреЗ рдпреЛрдЧреНрдп рд╣реИрдВред
рдПрдореНрдмреЗрдбреЗрдб рдПрдорд╡реАрдкреА рдХреЗ рдкреНрд░рдореБрдЦ рддрддреНрд╡реЛрдВ рдореЗрдВ рд╕реЗ рдПрдХ рдРрд╕рд╛ рдСрдмреНрдЬреЗрдХреНрдЯ рд╣реИ рдЬреЛ UI рдХреА рд╕реНрдерд┐рддрд┐ рдХреЗ рд▓рд┐рдП рдЬрд┐рдореНрдореЗрджрд╛рд░ рд╣реИ рдФрд░ рдЗрддрд┐рд╣рд╛рд╕ рдЯреЛрдХрди рдореЗрдВ рд╣реЗрд░рдлреЗрд░ рдХрд░рддрд╛ рд╣реИред
рдЬрдЧрд╣ рдпрд╛ рд╣реИрд╢ urls рдФрд░ рдЙрдирдХреЗ рдкреНрд░рд╕рдВрд╕реНрдХрд░рдг
рдЬреИрд╕рд╛ рдХрд┐ рдКрдкрд░ рдмрддрд╛рдпрд╛ рдЧрдпрд╛ рд╣реИ, UI рдХреА рд╡рд░реНрддрдорд╛рди рд╕реНрдерд┐рддрд┐ рдХреЗ рд▓рд┐рдП рдкреНрд▓реЗрд╕ рдСрдмреНрдЬреЗрдХреНрдЯ рдЬрд┐рдореНрдореЗрджрд╛рд░ рд╣реИред рд╕реНрдерд┐рддрд┐ рдЗрддрд┐рд╣рд╛рд╕ рдЯреЛрдХрди рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ URL рд╕реЗ рдЧреБрдЬрд░рддреА рд╣реИред рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, рдЗрд╕ рдСрдмреНрдЬреЗрдХреНрдЯ рдореЗрдВ рдЖрдк рдЙрди рдорд╛рдкрджрдВрдбреЛрдВ рдХреЛ рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдЬреЛ рдПрдХ рд╣реИрд╢ URL рдХреЗ рд╕рд╛рде рдкреНрд░реЗрд╖рд┐рдд рд╣реЛрддреЗ рд╣реИрдВред рдЯреЛрдХрдирд░ рдСрдмреНрдЬреЗрдХреНрдЯ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ URL рдХреА рд╕реНрдерд┐рддрд┐ рдПрдиреНрдХреЛрдбреЗрдб / рдбреАрдХреЛрдб рдХреА рдЧрдИ рд╣реИред рдЬрдм рд╣реИрд╢ URL рдореЗрдВ рдкреНрд░реЗрд╖рд┐рдд рдЕрдиреБрд░реЛрдз рдкреИрд░рд╛рдореАрдЯрд░ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рдирд┐рдореНрди рдирд┐рдпрдо рдХрд╛ рдкрд╛рд▓рди рдХрд░рдирд╛ рдмрд╣реБрдд рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╣реИ: рд╕рднреА рдкреИрд░рд╛рдореАрдЯрд░ рдЬреЛ рдкреНрд░рд╕рдВрд╕реНрдХрд░рдг рдХреЗ рдмрд╛рдж рд╣рдореЗрдВ URL рд╕реЗ "рджрд░реНрдЬ" рдХрд░рддреЗ рд╣реИрдВ, рдЙрдиреНрд╣реЗрдВ рд╡рд╛рдкрд╕ рдЙрд╕реА рд░реВрдк рдореЗрдВ URL рдореЗрдВ рдПрдиреНрдХреЛрдб рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред рдпрд╣ рддрд░реНрдХ рд╣реИ рдЬреЛ рдЯреЛрдХрдирд╛рдЗрдЬрд╝рд░ рд╡рд░реНрдЧ рдХреЗ рддрд░реАрдХреЛрдВ рдореЗрдВ рд▓рд╛рдЧреВ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред
рд╕рдордЭреМрддреЗ рдХреЗ рджреНрд╡рд╛рд░рд╛, рдЬрд┐рд╕реЗ рдЬреАрдбрдмреНрд▓реНрдпреВрдЯреА рдЯреАрдо рджреНрд╡рд╛рд░рд╛ рд╕реНрд╡реАрдХрд╛рд░ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдФрд░ рдЖрдзрд┐рдХрд╛рд░рд┐рдХ рдореИрдиреБрдЕрд▓ рдореЗрдВ рд╡рд░реНрдгрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЯреЛрдХрди рдзрд╛рд░рдХ рд╡рд░реНрдЧ рдХреЛ рдЖрдорддреМрд░ рдкрд░ рдкреНрд▓реЗрд╕ рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЗ рдЖрдВрддрд░рд┐рдХ рд╕реНрдерд┐рд░ рд╡рд░реНрдЧ рдХреЗ рд░реВрдк рдореЗрдВ рд╡рд░реНрдгрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдпрд╣ рдкреНрд▓реЗрд╕ рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЗ рдЪрд░ рдореЗрдВ рдХреНрд╡реЗрд░реА рдорд╛рдкрджрдВрдбреЛрдВ рдХреЛ рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХреЛрдб рдХреЛ рд╕рд░рд▓ рдХрд░рддрд╛ рд╣реИред рдпрджреНрдпрдкрд┐ рдЖрдк рдЯреЛрдХрди рдХреЗ рд▓рд┐рдП рдЕрд▓рдЧ-рдЕрд▓рдЧ рдХрдХреНрд╖рд╛рдУрдВ рдХреЗ рд╕рд╛рде рджреГрд╖реНрдЯрд┐рдХреЛрдг рдХреЛ рд▓рд╛рдЧреВ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред
рдЖрджреЗрд╢ рдирд┐рд░рд╛рдзрд╛рд░ рдирд╣реАрдВ рд╣реЛрдиреЗ рдХреЗ рд▓рд┐рдП, MailPlace рд╡рд░реНрдЧ рдХреЗ рдХреЛрдб рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдВ
package com.gshocklab.mvp.client.mvp.place; import com.google.gwt.place.shared.Place; import com.google.gwt.place.shared.PlaceTokenizer; import com.google.gwt.place.shared.Prefix; public class MailPlace extends Place { private static final String VIEW_HISTORY_TOKEN = "mail"; public MailPlace() { } @Prefix(value = VIEW_HISTORY_TOKEN) public static class Tokenizer implements PlaceTokenizer<MailPlace> { @Override public MailPlace getPlace(String token) { return new MailPlace(); } @Override public String getToken(MailPlace place) { return ""; } } }
рдпрд╣ рд╡рд░реНрдЧ рдЕрдВрддрд░реНрдирд┐рд╣рд┐рдд рд╕реНрдерд╛рди рд╡рд░реНрдЧ рд╕реЗ рд╡рд┐рд░рд╛рд╕рдд рдореЗрдВ рдорд┐рд▓рд╛ рд╣реИред рдЗрд╕рдореЗрдВ рд╣реИрд╢ URL рдХрд╛ рд╣рд┐рд╕реНрд╕рд╛ рд╕реНрдерд┐рд░ рдШреЛрд╖рд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рдЬреЛ рд╡рд┐рд╢рд┐рд╖реНрдЯ рд░реВрдк рд╕реЗ рд░рд╛рдЬреНрдп рдХреА рдкрд╣рдЪрд╛рди рдХрд░реЗрдЧрд╛ред рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ, рдпрд╣ "рдореЗрд▓" рд╣реИред рдЯреЛрдХрдирд┐рдиреЗрдЯрд░ рд╡рд░реНрдЧ рд░рд╛рдЬреНрдп рдХреЗ рдкреБрдирд░реНрдирд┐рд░реНрдорд╛рдг рдФрд░ рдЗрддрд┐рд╣рд╛рд╕ рдХреЗ рдЯреЛрдХрди рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдЗрд╕реЗ рдмрдЪрд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдЬрд┐рдореНрдореЗрджрд╛рд░ рд╣реИред рдПрдХ рд╡рд┐рд╢рд┐рд╖реНрдЯ рд╣реИрд╢ рдпреВрдЖрд░рдПрд▓ рдХреЗ рдЯреЛрдХрди рдХреЛ рдмрд╛рдЗрдВрдбрд┐рдВрдЧ
рдкреНрд░реАрдлрд╝рд┐рдХреНрд╕ рдПрдиреЛрдЯреЗрд╢рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред
рдкреНрд░рд╕рдВрд╕реНрдХрд░рдг рдЗрддрд┐рд╣рд╛рд╕ рдЖрдо рддреМрд░ рдкрд░ рдПрдХ рджрд┐рд▓рдЪрд╕реНрдк рд╡рд┐рд╖рдп рд╣реИ рдФрд░ рдПрдХ рдЕрд▓рдЧ рд▓реЗрдЦ рдХреЗ рд╣рдХрджрд╛рд░ рд╣реИрдВред рдпрд╣рд╛рдВ рд╣рдо рдЦреБрдж рдХреЛ рдЗрд╕ рддрдереНрдп рддрдХ рд╕реАрдорд┐рдд рд░рдЦрддреЗ рд╣реИрдВ рдХрд┐ рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдкреНрд░рддреНрдпреЗрдХ рдкреНрд▓реЗрд╕ рдСрдмреНрдЬреЗрдХреНрдЯ рд╕реЗ рдЬреБрдбрд╝рд╛ рдПрдХ рдЕрд▓рдЧ рд╣реИрд╢ URL рд╣реЛрдЧрд╛ред рдпрд╣ URL ":" рдХреЗ рд╕рд╛рде рд╕рдорд╛рдкреНрдд рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред рдЗрд╕ рдмреГрд╣рджрд╛рдиреНрддреНрд░ рдХреЗ рдмрд╛рдж, рдЖрдк рдЕрддрд┐рд░рд┐рдХреНрдд рдкреИрд░рд╛рдореАрдЯрд░ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдЖрдк рдлреЙрд░реНрдо рдХрд╛ URL #mail: inbox, #contacts: new, рдЖрджрд┐ рдмрдирд╛ рд╕рдХрддреЗ рд╣реИрдВред рдФрд░ рдЗрди рдЯреЛрдХрди рдХреЛ рдЧреЗрдЯрдкреНрд▓рд╕ () рд╡рд┐рдзрд┐ рдореЗрдВ рд╕рдВрд╕рд╛рдзрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, рд╣реИрд╢ URL рдХрд╛ рдкрд╣рд▓рд╛ рднрд╛рдЧ рд╕рдмрд╕рд┐рд╕реНрдЯрдо рдЖрдЗрдбреЗрдВрдЯрд┐рдлрд╝рд╛рдпрд░ (рдореЗрд▓, рдХрд╛рд░реНрдп рдЗрддреНрдпрд╛рджрд┐) рд╣реИ, рдЬреЛ рд╕рдм рдХреБрдЫ рдЬреЛ рдХреЛрд▓рди рдХреЗ рдмрд╛рдж рдЖрддрд╛ рд╣реИ рдЙрд╕реЗ рдПрдХреНрд╢рди рд╕рдмрд╕рд┐рд╕реНрдЯрдо рдорд╛рдирд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред
рдбреЗрдореЛ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдореЗрдВ, рдЕрддрд┐рд░рд┐рдХреНрдд рдЯреЛрдХрди (рдпрд╛ рдХреНрд░рд┐рдпрд╛рдПрдВ) рдХрд╛ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП getToken () рд╡рд┐рдзрд┐ рд╕рднреА рдЯреЛрдХрди рдореЗрдВ рдПрдХ рдЦрд╛рд▓реА рд╕реНрдЯреНрд░рд┐рдВрдЧ рд▓реМрдЯрд╛рддреА рд╣реИ, рдФрд░ getPlace () рд╡рд┐рдзрд┐ рдмрдирд╛рдИ рдЧрдИ рдЬрдЧрд╣ рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЛ рд╡рд╛рдкрд╕ рдХрд░рддреА рд╣реИред
рд╡рд╛рдВрдЫрд┐рдд рдЧрддрд┐рд╡рд┐рдзрд┐ рдХрд╛ рдирд┐рд░реНрдзрд╛рд░рдг рдХрд░рдирд╛ рдФрд░ рд╕рдВрдЪрд╛рд▓рдХреЛрдВ рдХреЛ рдкрдВрдЬреАрдХреГрдд рдХрд░рдирд╛
рдЬрдм рдХреЛрдИ рдирдпрд╛ URL рдЖрддрд╛ рд╣реИ рдФрд░ рдкреНрд▓реЗрд╕ рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЛ рддреБрд░рдВрдд рд╣рдЯрд╛ рджрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ рдПрдХреНрдЯрд┐рд╡рд┐рдЬрд╝рди рдореИрдиреЗрдЬрд░, ActivMapper рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ, рдпрд╣ рддрдп рдХрд░рддрд╛ рд╣реИ рдХрд┐ рдХреМрди рд╕рд╛ рдкреНрд░рд╕реНрддреЛрддрд╛ рдСрдмреНрдЬреЗрдХреНрдЯ рдЪрд▓рд╛рдирд╛ рд╣реИред рдЗрд╕ рдкрд░рд┐рднрд╛рд╖рд╛ рдХреЛ рд╕рд░рд▓рддрд╛ рд╕реЗ рд▓рд╛рдЧреВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ
public class DemoActivityMapper implements ActivityMapper { private ClientFactory clientFactory; public DemoActivityMapper(ClientFactory clientFactory) { super(); this.clientFactory = clientFactory; } @Override public Activity getActivity(Place place) { if (place instanceof MailPlace) { return new MailActivity(clientFactory); } else if (place instanceof ContactsPlace) { return new ContactsActivity(clientFactory); } else if (place instanceof TasksPlace) { return new TasksActivity(clientFactory); } return null; } }
рд░рдЬрд┐рд╕реНрдЯрд░ рд╣реИрд╢ URL рд╣реИрдВрдбрд▓рд░реНрд╕, рдЕрд░реНрдерд╛рдд Tokenizers рдЗрдВрдЯрд░рдлреЗрд╕ рдореЗрдВ рдЪрд▓рддреЗ рд╣реИрдВ PlaceHistoryMapper
package com.gshocklab.mvp.client.mvp; import com.google.gwt.place.shared.PlaceHistoryMapper; import com.google.gwt.place.shared.WithTokenizers; import com.gshocklab.mvp.client.mvp.place.ContactsPlace; import com.gshocklab.mvp.client.mvp.place.MailPlace; import com.gshocklab.mvp.client.mvp.place.TasksPlace; @WithTokenizers({MailPlace.Tokenizer.class, ContactsPlace.Tokenizer.class, TasksPlace.Tokenizer.class}) public interface DemoPlaceHistoryMapper extends PlaceHistoryMapper { }
рдЗрд╕ рд╕реНрддрд░ рдкрд░ рд╕рднреА рдХреА рдЬрд░реВрд░рдд рд╣реИ рдХрд┐ рдмрд╕ @WithTokenizers рдПрдиреЛрдЯреЗрд╢рди рдореЗрдВ рдЖрд╡реЗрджрди рдЯреЛрдХрди рд╡рд░реНрдЧреЛрдВ рдХреЛ рд╕реВрдЪреАрдмрджреНрдз рдХрд░реЗрдВред
рдпрд╣ рд╕рдм рдПрдХ рд╕рд╛рде рд░рдЦрдирд╛
MVP рдлреНрд░реЗрдорд╡рд░реНрдХ рдореЗрдХреЗрдирд┐рдЬреНрдо рдХреЛ рд╢реБрд░реВ рдХрд░рдиреЗ рдФрд░ рд╢реБрд░реВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕рднреА рдХреЛрдб onModuleLoad () рд╡рд┐рдзрд┐ EntryPoint рдореЗрдВ рд╕рдВрдХрд▓рд┐рдд рдХрд┐рдП рдЧрдП рд╣реИрдВ
package com.gshocklab.mvp.client; import com.google.gwt.activity.shared.ActivityManager; import com.google.gwt.activity.shared.ActivityMapper; import com.google.gwt.core.client.EntryPoint; import com.google.gwt.core.client.GWT; import com.google.gwt.event.shared.EventBus; import com.google.gwt.place.shared.PlaceController; import com.google.gwt.place.shared.PlaceHistoryHandler; import com.google.gwt.user.client.History; import com.google.gwt.user.client.ui.RootLayoutPanel; import com.google.gwt.user.client.ui.SimplePanel; import com.gshocklab.mvp.client.layout.AppLayout; import com.gshocklab.mvp.client.mvp.DemoActivityMapper; import com.gshocklab.mvp.client.mvp.DemoPlaceHistoryMapper; import com.gshocklab.mvp.client.mvp.place.MailPlace; public class MvpInActionEntryPoint implements EntryPoint { private SimplePanel containerWidget; private MailPlace defaultPlace = new MailPlace(); @Override public void onModuleLoad() { final AppLayout mainLayout = new AppLayout(); containerWidget = mainLayout.getAppContentHolder(); final ClientFactory clientFactory = GWT.create(ClientFactory.class); EventBus eventBus = clientFactory.getEventBus(); PlaceController placeController = clientFactory.getPlaceController();
рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рд╕реНрдкрд╖реНрдЯреАрдХрд░рдг рдХреЛрдб рджреНрд╡рд╛рд░рд╛ рдЕрддрд┐рд░реЗрдХ рд╣реЛрдЧрд╛, рд╕рдм рдХреБрдЫ рд╕рд░рд▓ рдФрд░ рд╕реНрдкрд╖реНрдЯ рд╣реИред рдпрд╣ рдзреНрдпрд╛рди рджрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП рдХрд┐ History.newItem ("рдореЗрд▓:") рдкрд░ рдПрдХ рдХреЙрд▓ рд╕рддрд╣реА рд╣реЛ рд╕рдХрддреА рд╣реИред MailActivity рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рд▓реЙрдиреНрдЪ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ MailPlace рдХреЛ рдбрд┐рдлреЙрд▓реНрдЯ рдкреНрд▓реЗрд╕ рдХреЗ рд░реВрдк рдореЗрдВ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред рдПрдХ рдФрд░ рдмрд╛рдд рдпрд╣ рд╣реИ рдХрд┐ рд╕реНрдЯрд╛рд░реНрдЯрдЕрдк рдкрд░ рд╣рдо рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдХреЗ рдПрдбреНрд░реЗрд╕ рдмрд╛рд░ рдореЗрдВ рд╣реИрд╢ URL # рдИрдореЗрд▓ рдирд╣реАрдВ рджреЗрдЦреЗрдВрдЧреЗред рдпрджрд┐ рдХрд┐рд╕реА рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдХреЗ рд▓рд┐рдП рд╕реНрдЯрд╛рд░реНрдЯ рд╣реИрд╢ URL рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рдирд╛ рдорд╣рддреНрд╡рдкреВрд░реНрдг рдирд╣реАрдВ рд╣реИ, рддреЛ History.newItem () рдкрд░ рдХреЙрд▓ рд╣рдЯрд╛рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред
рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЕрдВрддрд░реНрдирд┐рд╣рд┐рдд MVP- рдлреНрд░реЗрдорд╡рд░реНрдХ рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЛ GWT- рдореЙрдбреНрдпреВрд▓ (gwt.xml- рдлрд╝рд╛рдЗрд▓) рдХреЗ рд╡рд┐рд╡рд░рдг рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рд╕рдВрдмрдВрдзрд┐рдд GWT- рдореЙрдбреНрдпреВрд▓ рдХреЛ рдЬреЛрдбрд╝рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ
<?xml version="1.0" encoding="UTF-8"?> <module rename-to='mvpinaction'> <inherits name='com.google.gwt.user.User' /> <inherits name="com.google.gwt.activity.Activity"/> <inherits name="com.google.gwt.place.Place"/> <entry-point class='com.gshocklab.mvp.client.MvpInActionEntryPoint' /> <replace-with class="com.gshocklab.mvp.client.ClientFactoryImpl"> <when-type-is class="com.gshocklab.mvp.client.ClientFactory" /> </replace-with> <source path='client' /> </module>
ClientFactory рдЙрджрд╛рд╣рд░рдг рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдЖрд╕реНрдердЧрд┐рдд рдмрд╛рдзреНрдпрдХрд╛рд░реА рдирд┐рдпрдо рднреА рдпрд╣рд╛рдБ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред
рдПрдХ рдирд┐рд╖реНрдХрд░реНрд╖ рдХреЗ рдмрдЬрд╛рдп
рдмрд╕ рдЗрддрдирд╛ рд╣реАред рдореИрдВ AppLayout рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЗ рд░реВрдЯ рд▓реЗрдЖрдЙрдЯ рдХреЗ рд╕рд╛рде рдлрд╝рд╛рдЗрд▓ рдкреНрд░рджрд╛рди рдирд╣реАрдВ рдХрд░рддрд╛, рдЖрдк рдЗрд╕реЗ рд╕реНрд░реЛрдд рдореЗрдВ рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВред рдЗрд╕ рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рд▓рд┐рдВрдХ рд╣реИрдВ рдЬрд┐рдирдХреА href рд╡рд┐рд╢реЗрд╖рддрд╛рдУрдВ рдореЗрдВ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рд╕рдмрд╕рд┐рд╕реНрдЯрдо рдореЗрдВ рдиреЗрд╡рд┐рдЧреЗрдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╣реИрд╢ URL рд╣реИрдВред рдЖрдк рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдХреЗ рдПрдбреНрд░реЗрд╕ рдмрд╛рд░ рдореЗрдВ рд╕рд╣реА URL рдЯрд╛рдЗрдк рдХрд░рдХреЗ рднреА рдПрдХ рдпрд╛ рдЕрдиреНрдп рд╕рдмрд╕рд┐рд╕реНрдЯрдо рдЦреЛрд▓ рд╕рдХрддреЗ рд╣реИрдВред рд░рд╛рдЬреНрдп рдХреЛ URL рд╕реЗ рдЙрдкрдпреБрдХреНрдд рд╕реНрдерд╛рди рдкрд░ рдкрд░рд┐рд╡рд░реНрддрд┐рдд рдХрд░рдиреЗ рдХреА рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХреЛ рд╕рдВрдмрдВрдзрд┐рдд рдЧрддрд┐рд╡рд┐рдзрд┐ рдХреЗ рд▓реЙрдиреНрдЪ рдХреЗ рд╕рд╛рде рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд░реВрдк рд╕реЗ рд╢реБрд░реВ рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛, рдЬреЛ рдЙрд╕ рджреГрд╢реНрдп рдХреЛ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░реЗрдЧрд╛ рдЬрд┐рд╕рдХреА рдЖрдкрдХреЛ рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред
рдореИрдВ рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛ рдиреЛрдЯ рдХрд░рддрд╛ рд╣реВрдВ рдХрд┐ рдиреЛрдЯ рдФрд░ рдбреЗрдореЛ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдиреЗ рдЬреАрд╡рди рдореЗрдВ рдРрд╕реЗ рдорд╣рддреНрд╡рдкреВрд░реНрдг рдХреНрд╖рдгреЛрдВ рдХреЛ рд╕рдВрдмреЛрдзрд┐рдд рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬреИрд╕реЗ рдХрд┐ рдЗрд╡реЗрдВрдЯ рдмрд╕ (рдЗрд╡реЗрдВрдЯрдмрд╕), рд╣реИрд╢ рдпреВрдЖрд░рдПрд▓ рдорд╛рдкрджрдВрдбреЛрдВ рдХрд╛ рдкреНрд░рд╕рдВрд╕реНрдХрд░рдг, рдФрд░ рдмрд╣реБрдд рдХреБрдЫред
рдПрдХ рдХрд╛рд░реНрдпрд╢реАрд▓
рдбреЗрдореЛ рдкреНрд░реЛрдЬреЗрдХреНрдЯ ,
Google рдХреЛрдб рдХрд╛ рд╕реНрд░реЛрдд рдХреЛрдб ред рд╕рд╛рд╡рдзрд╛рдиреА рдмрд░рддреЗрдВ!
рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдФрд░ рдЯрд┐рдкреНрдкрдгрд┐рдпреЛрдВ рдХреА рдкреНрд░рддреАрдХреНрд╖рд╛ рд╣реИред
рдмрд╣реБ рдкрддреНрд░ рдХреЗ рд▓рд┐рдП рдХреНрд╖рдорд╛ рдХрд░реЗрдВред рдореБрдЭреЗ рдЙрдореНрдореАрдж рд╣реИ рдХрд┐ рдпрд╣ рдкрд░рд┐рдЪрдпрд╛рддреНрдордХ рдиреЛрдЯ рдХрд┐рд╕реА рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧреА рд╕рд╛рдмрд┐рдд рд╣реБрдЖ (рд╣рд╛рд▓рд╛рдВрдХрд┐ рдпрд╣ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдПрдХреАрдХреГрдд рдПрдорд╡реАрдкреА рдХреА рдкреВрд░реА рд╢рдХреНрддрд┐ рдХреЛ рдХрд╡рд░ рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ), рдореИрдВрдиреЗ рдЗрд╕реЗ рдПрдХ рдХрд╛рд░рдг рдХреЗ рд▓рд┐рдП рд▓рд┐рдЦрд╛ рдерд╛ рдФрд░ рдпрд╣ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рд╢рд╛рдВрдд GWT рдЕрдиреБрдкреНрд░рдпреЛрдЧреЛрдВ рдХреЗ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреЗ рд▓рд┐рдП рдПрдХ рд╢реБрд░реБрдЖрддреА рдмрд┐рдВрджреБ рдХреЗ рд░реВрдк рдореЗрдВ рдХрд╛рдо рдХрд░реЗрдЧрд╛