рдЧреНрд░реЗрд▓реНрд╕, jQuery, AJAX: рдПрдВрдХрд░ рдиреЗрд╡рд┐рдЧреЗрд╢рди рдХрд░рддреЗ рд╣реИрдВред рднрд╛рдЧ 1

AJAX рдФрд░ рд╕рднреА, рд╕рднреА, рд╕рднреА



рдкрд┐рдЫрд▓реА рд╢реНрд░реГрдВрдЦрд▓рд╛ рдореЗрдВ, рд╣рдордиреЗ jQuery рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдПрдХ рд╕рд░рд▓ рдЧреНрд░реЗрд▓реНрд╕ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдмрдирд╛рдпрд╛, рдФрд░ рдЕрдкрдиреЗ рд▓рд┐рдП рдпрд╣ рднреА рддрдп рдХрд┐рдпрд╛ рдХрд┐ рдпрд╣ рд╕рдВрднрд╡ рд╣реИ рдФрд░ рдЧреНрд░реЗрд▓реНрд╕ рдореЗрдВ jQuery рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рднреА рдЖрд╡рд╢реНрдпрдХ рд╣реИред рд╣рдо рдЕрдзрд┐рдХ рдЧрдВрднреАрд░ рдЪреАрдЬреЛрдВ рдкрд░ рдЪрд░реНрдЪрд╛ рдХрд░реЗрдВрдЧреЗ рдЬреЛ рдЗрд╕ рддрд░рд╣ рдХреЗ рдЧреБрдЪреНрдЫрд╛ рдХреЗ рд╕рд╛рде рдХреА рдЬрд╛ рд╕рдХрддреА рд╣реИрдВред



рдпрд╣ рджреЗрдЦрдирд╛ рдЖрд╕рд╛рди рд╣реИ рдХрд┐ рдЕрдзрд┐рдХ рд╕реЗ рдЕрдзрд┐рдХ рд╕рд╛рдЗрдЯреЗрдВ AJAX рдФрд░ рдЖрдВрд╢рд┐рдХ рдкреГрд╖реНрда рдЕрдкрдбреЗрдЯ рдФрд░ рдЕрд╡рд┐рд╢реНрд╡рд╕рдиреАрдп рдорд╛рддреНрд░рд╛ рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХрд░рддреА рд╣реИрдВред рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ, "рднрд░рд╡рд╛рдВ" AJAX рд▓рд┐рдВрдХ рдкреГрд╖реНрда рдкрд░ рдЖрдВрддрд░рд┐рдХ рдиреЗрд╡рд┐рдЧреЗрд╢рди рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рдХреБрдЫ рдЯреИрдм рд╕реНрд╡рд┐рдЪ рдХрд░ рд░рд╣рд╛ рд╣реИред рдпрд╣ рдЕрдЪреНрдЫрд╛ рд╣реИ рдХреНрдпреЛрдВрдХрд┐

рдП) рдХрдо рдбреЗрдЯрд╛ рдХреЛ рд╕рд░реНрд╡рд░ рд╕реЗ рдбрд┐рд╕реНрдЯрд┐рд▓реНрдб рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ - рдХреЗрд╡рд▓ рдкреЗрдЬ рдХрд╛ рд╡рд╛рдВрдЫрд┐рдд рдЯреБрдХрдбрд╝рд╛ рдФрд░

рдмреА) рд╡реЗрдм рдкреЗрдЬ рдЕрдХреНрд╕рд░ рд╡рд┐рд╢рд╛рд▓ рд╕реАрдПрд╕рдПрд╕ рдФрд░ рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреЛ рд▓реЛрдб рдХрд░рддреЗ рд╣реИрдВ, рдЬрд┐рдиреНрд╣реЗрдВ AJAX рдЕрдкрдбреЗрдЯ рдХреЗ рджреМрд░рд╛рди рдкреБрдирдГ рд▓реЛрдб рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред



рдЗрд╕рд▓рд┐рдП, рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдЕрдиреБрдкреНрд░рдпреЛрдЧреЛрдВ рдХрд╛ рдирд┐рд░реНрдорд╛рдг рдмрд╣реБрдд рдЖрдо рд╣реИ: рдПрдХ рдмрдбрд╝рд╛ "рд╕реНрдЯрд╛рд░реНрдЯ" рдкреЗрдЬ рдЬреЛ рд╕рднреА рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреЛрдб рдФрд░ CSS рд▓реЛрдб рдХрд░ рд░рд╣рд╛ рд╣реИ рдФрд░ AJAX рджреНрд╡рд╛рд░рд╛ рд▓реЛрдб рдХрд┐рдП рдЧрдП рдЫреЛрдЯреЗ "рдЖрдВрддрд░рд┐рдХ" рдлрд╝рдВрдХреНрд╢рди рдмреНрд▓реЙрдХ рд╣реИрдВред рдЗрд╕рдХреЗ рд╕рд╛рде рдХрдИ рд╕рдорд╕реНрдпрд╛рдПрдВ рд╣реИрдВ:

  1. AJAX рдХреНрд░рд┐рдпрд╛рдУрдВ рдХреЗ рдкрд░рд┐рдгрд╛рдорд╕реНрд╡рд░реВрдк, рдкреГрд╖реНрда рдХреА рдЖрдВрддрд░рд┐рдХ рд╕реНрдерд┐рддрд┐ рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдХреЗ рдПрдбреНрд░реЗрд╕ рдмрд╛рд░ рдореЗрдВ рдкрд░рд┐рд▓рдХреНрд╖рд┐рдд рдирд╣реАрдВ рд╣реЛрддреА рд╣реИред
  2. рдкрд░рд┐рдгрд╛рдорд╕реНрд╡рд░реВрдк, рдЖрдВрддрд░рд┐рдХ рдкреГрд╖реНрдареЛрдВ рдХреЛ рдмреБрдХрдорд╛рд░реНрдХ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ; рдЖрдк "рдХрд┐рд╕реА рдорд┐рддреНрд░ рдХреЛ рд▓рд┐рдВрдХ рдирд╣реАрдВ рднреЗрдЬ рд╕рдХрддреЗ рд╣реИрдВ"ред
  3. рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдореЗрдВ рдмреИрдХ / рдлреЙрд░рд╡рд░реНрдб рдиреЗрд╡рд┐рдЧреЗрд╢рди рдХрд╛рдо рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ AJAX рд▓рд┐рдВрдХ рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдЗрддрд┐рд╣рд╛рд╕ рдореЗрдВ рдирд╣реАрдВ рдЖрддреЗ рд╣реИрдВред
рд╣рд╛рд▓рд╛рдВрдХрд┐, рдмрдбрд╝реА рд╕рд╛рдЗрдЯреЛрдВ рдХреЛ рдХрд┐рд╕реА рддрд░рд╣ рдХрд╛ "рд╣реИрдХрд░" рд╕рдорд╛рдзрд╛рди рдорд┐рд▓ рдЧрдпрд╛ рд╣реИ, рдЬрд┐рд╕реЗ рдЕрдм рд╣рдо рдЧреНрд░реЗрд▓реНрд╕ рдФрд░ jQuery рдкрд░ рдЕрдкрдиреЗ рд╕реНрд╡рдпрдВ рдХреЗ рдПрдирд╛рд▓реЙрдЧ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдВрдЧреЗ рдФрд░ рд▓рд┐рдЦреЗрдВрдЧреЗред



рдПрдВрдХрд░ рдиреЗрд╡рд┐рдЧреЗрд╢рди



рддрдереНрдп рдпрд╣ рд╣реИ рдХрд┐ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, рдЖрдк рдкреГрд╖реНрда рдХреЛ рдлрд┐рд░ рд╕реЗ рд▓реЛрдб рдХрд┐рдП рдмрд┐рдирд╛ рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдХреЗ рдПрдбреНрд░реЗрд╕ рдмрд╛рд░ рдХреЛ рдмрджрд▓ рд╕рдХрддреЗ рд╣реИрдВ, рдпрджрд┐ рдЖрдк рдХреЗрд╡рд▓ рдПрдВрдХрд░ рдмрджрд▓рддреЗ рд╣реИрдВ, рдЕрд░реНрдерд╛рддред рдмрд╛рд░ рдХреЗ рдмрд╛рдж рдПрдбреНрд░реЗрд╕ рдмрд╛рд░ рдХрд╛ рдЕрдВрддрд┐рдо рднрд╛рдЧ #



ред рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдЗрд╕ рд╕рдВрдХреНрд░рдордг рдХреЛ рдкреГрд╖реНрда рдХреЗ рдЕрдВрджрд░ рдорд╛рдирддрд╛ рд╣реИ, рдФрд░ рдЙрд╕ рд╕реНрдерд┐рддрд┐ рдХреЛ рд╢рд╛рдВрдд рдХрд░рддрд╛ рд╣реИ рдЬрдм рдкреГрд╖реНрда рдкрд░ рд╡рд╛рдВрдЫрд┐рдд рдПрдВрдХрд░ рдирд╣реАрдВ рд╣реЛрддрд╛ рд╣реИ, рдмрд╕ рдкрддреЗ рдФрд░ рдЗрддрд┐рд╣рд╛рд╕ рдХреЛ рдЕрдкрдбреЗрдЯ рдХрд░рддрд╛ рд╣реИред рдпрд╣ рд╡рд╣реА рд╣реИ рдЬреЛ рд╣рдореЗрдВ рдЪрд╛рд╣рд┐рдПред рдпрджрд┐ рдЖрдк рд▓рдВрдЧрд░ рдХреЗ рдЕрдВрджрд░ рдкреГрд╖реНрда рдХреА рд╕реНрдерд┐рддрд┐ рдХреЛ рд╕рд╣реЗрдЬрддреЗ рд╣реИрдВ, рддреЛ рдЖрдк рдЗрд╕реЗ рдмреБрдХрдорд╛рд░реНрдХ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рд╡рд╛рдкрд╕ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рдЖрдк рдмреИрдХ / рдлреЙрд░рд╡рд░реНрдб рдЯреНрд░рд╛рдВрдЬрд╝рд┐рд╢рди (!) рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдЗрд╕ рд╕реНрдерд┐рддрд┐ рдореЗрдВ, рдкреГрд╖реНрда рдХрд╛ рдЖрдзрд╛рд░ URL рдирд╣реАрдВ рдмрджрд▓рддрд╛ рд╣реИ рдФрд░ рдкреГрд╖реНрда рдкреБрдирдГ рд▓реЛрдб рдирд╣реАрдВ рд╣реЛрддрд╛ рд╣реИред



рдЗрд╕ рддрд░рд╣ рдХреЗ рд╕рдорд╛рдзрд╛рди рдХреЗ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреЗ рдЙрджрд╛рд╣рд░рдгреЛрдВ рдХреЗ рд▓рд┐рдП рджреВрд░ рдЬрд╛рдирд╛ рдЖрд╡рд╢реНрдпрдХ рдирд╣реАрдВ рд╣реИред рдЗрд╕ рдпреЛрдЬрдирд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдлреЗрд╕рдмреБрдХ, рдЬреАрдореЗрд▓, рдЧреВрдЧрд▓ рдкрд┐рдХрд╛рд╕рд╛ рд╡реЗрдм рдПрд▓реНрдмрдо рдореЗрдВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЗрд╕ рдХреА рдПрдХ рдорд╣рддреНрд╡рдкреВрд░реНрдг рд░рд╛рд╢рд┐ odnoklassniki.ru рдкрд░ рджреЗрдЦреА рдЬрд╛ рд╕рдХрддреА рд╣реИред Google рд╡реЗрдм рдЯреВрд▓рдХрд┐рдЯ рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдПрдВрдХрд░ рдиреЗрд╡рд┐рдЧреЗрд╢рди рдкрд░ рдЖрдзрд╛рд░рд┐рдд рд╣реИред



рдХрд╣реЛ, рдЬреАрдореЗрд▓ рдореЗрдВ рдЖрдкрдХреЛ рдкрддреНрд░ рдХрд╛ рд╕реАрдзрд╛ рд▓рд┐рдВрдХ рдорд┐рд▓ рд╕рдХрддрд╛ рд╣реИ, рдФрд░ рд▓рд┐рдВрдХ рдмреБрдХрдорд╛рд░реНрдХ рд╣реЛ рдЬрд╛рдПрдЧрд╛ред рд▓рд┐рдВрдХ рдХреБрдЫ рдЗрд╕ рддрд░рд╣ рджрд┐рдЦрд╛рдИ рджреЗрдЧрд╛:



mail.google.com/mail/?shva=1 #inbox/12c5f14c01a5473c







рдХреЛрдИ 12c5f14c01a5473c



рдирд╣реАрдВ рд╣реИ рдХрд┐ 12c5f14c01a5473c



рдХрд┐рд╕реА рддрд░рд╣ рдХреА рдЖрдВрддрд░рд┐рдХ рдЖрдИрдбреА рд╣реИред



рдПрдХ рдЖрд╡реЗрджрди рдкрддреНрд░ рд▓рд┐рдЦрдирд╛



рдЖрдЗрдП рдЗрд╕ рджреГрд╖реНрдЯрд┐рдХреЛрдг рдХреЗ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╕реЛрдЪрддреЗ рд╣реИрдВред рдкрддрд╛ рдмрд╛рд░ рдмрд╕ рдмрджрд▓рддрд╛ рд╣реИ:



 document.location.hash = '#myAnchor';
      
      





(рдпрд╛ рд╕реАрдзреЗ рд▓рд┐рдВрдХ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ
 <a href="#myAnchor">My Link</a>
      
      



)ред



рдЖрдЗрдП рдПрдХ Grails рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЛ рдкреЗрдЪреАрджрд╛ рдирд╛рдо my-app рдХреЗ рд╕рд╛рде рд▓рд┐рдЦрдирд╛ рд╢реБрд░реВ рдХрд░реЗрдВ , рдЬрд┐рд╕рдореЗрдВ рдиреЗрд╡рд┐рдЧреЗрд╢рди рдкреВрд░реА рддрд░рд╣ рд╕реЗ AJAX рдкрд░ рдЖрдзрд╛рд░рд┐рдд рд╣реЛред рд╣рдорд╛рд░реЗ рдЖрд╡реЗрджрди рдореЗрдВ рддреАрди рдЯреИрдм рд╣реЛрдВрдЧреЗ:



anchor1



рдмрд╛рд╣реНрдп рд░реВрдк рд╕реЗ, рдпрд╣ рдПрдХ рдирд┐рдпрдорд┐рдд рдкреГрд╖реНрда рдХреА рддрд░рд╣ рджрд┐рдЦрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рд╣рдо рдпрд╣ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ рдХрд┐ рдкреГрд╖реНрда рдХреЗ рдХреЗрд╡рд▓ рдЕрдВрджрд░ рдХреЛ рдкреВрд░реНрдг рдкреБрдирдГ рд▓реЛрдб рдХрд┐рдП рдмрд┐рдирд╛ рдЕрдкрдбреЗрдЯ рдХрд┐рдпрд╛ рдЬрд╛рдПред



рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, рдирд┐рдореНрди рдлрд╝реЙрд░реНрдо рдХрд╛ рдПрдХ рд╕рд╛рдЗрдЯрдореИрдк рд▓реЗрдЖрдЙрдЯ рдмрдирд╛рдПрдВ:



grails-app/views/layouts/main.gsp





 <html> <head> <title><g:layoutTitle default="Grails" /></title> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /> <link rel="stylesheet" href="${resource(dir:'css',file:'main.css')}" /> <g:layoutHead /> <g:javascript library="jquery"/> <g:javascript library="application" /> </head> <body> ... %{--   --}% <div class="navbar"> <div class="navitem"> <a href="#do/receipts" class="navlink"></a> <div class="spinner" /> </div> <div class="navitem"> <a href="#do/buy" class="navlink"> </a> <div class="spinner" /> </div> <div class="navitem"> <a href="#do/feedback" class="navlink"></a> <div class="spinner" /> </div> </div> %{--   --}% <div id="pageContent"> <g:layoutBody /> </div> ... </body> </html>
      
      







рдпрд╣рд╛рдВ рдЕрдм рддрдХ рдХреЛрдИ рдЖрд╢реНрдЪрд░реНрдп рдирд╣реАрдВ рд╣реБрдЖред рдЬреИрд╕рд╛ рдХрд┐ рдЖрдк рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ, рд▓рд┐рдВрдХ рдирд┐рдпрдорд┐рдд рдПрдВрдХрд░ рд▓рд┐рдВрдХ рд╕реЗ рдЕрд▓рдЧ рдирд╣реАрдВ рд╣реИрдВред рд╡реЗ рдХреИрд╕реЗ рдХрд╛рдо рдХрд░рддреЗ рд╣реИрдВ? рдРрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдо jQuery рдореЗрдВ рдРрд╕рд╛ рдХреЛрдб рд▓рд┐рдЦрддреЗ рд╣реИрдВ:



web-app/js/application.js





 //      var currentState = ''; function buildURL(anchor) { return document.location.toString().substr(0, document.location.toString().indexOf('#')) + anchor.substr(1); } function clickNavLink() { //  ? var href = $(this).attr('href'); //       if (href == currentState) { return false; } if (document.location.hash != href) { document.location.hash = href; } //   var link = this; //    $(this).parent().find('.busy').show(); $(this).hide(); var targetURL = buildURL(href); currentState = href; //   ,     $.ajax({ context:$('#pageContent'), url:targetURL, dataType:'html', method:'GET', complete: function() { //   . $(link).show(); updateNavLinks(); }, success: function(data) { //  ""  . $('#pageContent').html(data); } }); return true; } //   ,   / function updateNavLinks() { $('a.navlink').each(function(i) { var href = $(this).attr('href'); $(this).parent().find('.busy').hide(); if (href == currentState) { $(this).addClass('disabled'); } else { $(this).removeClass('disabled'); } }); } // .     . jQuery(document).ready(function() { $('a.navlink').each(function() { $(this).click(clickNavLink); }); });
      
      







рдпрд╣рд╛рдВ рд╕рдм рдХреБрдЫ рдХрд╛рдлреА рд╕рд░рд▓ рд╣реИ: рд╣рдо рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдЪрд░ currentState рдореЗрдВ рдкреГрд╖реНрда рдХреА рд╡рд░реНрддрдорд╛рди рд╕реНрдерд┐рддрд┐ рдХреЛ рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд░рддреЗ рд╣реИрдВред рдЬрдм рд╣рдо рд▓рд┐рдВрдХ рдкрд░ рдХреНрд▓рд┐рдХ рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рд╣рдо AJAX рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдЖрдВрддрд░рд┐рдХ рдкреГрд╖реНрда рдХреЛ рд▓реЛрдб рдХрд░рддреЗ рд╣реИрдВ, AJAX рдХреЙрд▓ рдХреЗ рдкрд░рд┐рдгрд╛рдо рдХреЛ div # pageContent рдореЗрдВ рд╕реЗрд╡ рдХрд░рддреЗ рд╣реИрдВ ред рдЗрд╕ рд╕реНрдерд┐рддрд┐ рдореЗрдВ, рд▓реЛрдб рдХрд┐рдП рдЧрдП рдкреГрд╖реНрда рдХрд╛ URL рдкреГрд╖реНрда рдХреЗ рдЖрдзрд╛рд░ рдкрддреЗ рдкрд░ рд▓рдВрдЧрд░ рдкрде рдХреЛ рдЬреЛрдбрд╝рдХрд░ рдмрдирддрд╛ рд╣реИ, рдЕрд░реНрдерд╛рддред



 /my-app/#do/receipts => /my-app/do/receipts
      
      





рдпрд╣ рд╕рд░рд▓ рдирд┐рдпрдо рддреБрд░рдВрдд рд╣рдореЗрдВ рдпрд╣ рд╕рдордЭрдиреЗ рдореЗрдВ рдорджрдж рдХрд░рддрд╛ рд╣реИ рдХрд┐ рд▓рд┐рдВрдХ рдХреНрдпрд╛ рдХрд░рддрд╛ рд╣реИред рд▓рд┐рдВрдХ рдХреЛ "рд╡рд░реНрддрдорд╛рди" рдХреЗ рд░реВрдк рдореЗрдВ рдкрд╣рдЪрд╛рдирдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдо рдЗрд╕реЗ disabled



рд╡рд░реНрдЧ рдХреЛ рдЕрд╕рд╛рдЗрди рдХрд░рддреЗ рд╣реИрдВред CSS рдореЗрдВ (рдЬреЛ рдореИрдВ рдирд╣реАрдВ рджреВрдВрдЧрд╛) рдЗрд╕ рд╡рд░реНрдЧ рдХреЛ рдПрдХ рдЕрд▓рдЧ рд░рдВрдЧ рдореЗрдВ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ рддрд╛рдХрд┐ рдпрд╣ рджреЗрдЦрд╛ рдЬрд╛ рд╕рдХреЗ рдХрд┐ рдХреМрди рд╕рд╛ рд▓рд┐рдВрдХ рдЪрд╛рд▓реВ рд╣реИ (рджреМрд░рд╛ рдХрд┐рдпрд╛ рдЧрдпрд╛)ред



рд╕рд░реНрд╡рд░ рд╕рд╛рдЗрдб



рдЕрдм рд╕рд░реНрд╡рд░ рд╕реНрдЯрдлрд┐рдВрдЧ рдмрдирд╛рдирд╛ рдЕрдЪреНрдЫрд╛ рд╣реЛрдЧрд╛ред рдореИрдВрдиреЗ рддреАрдиреЛрдВ рд▓рд┐рдВрдХ рдХреЛ рд╕рдВрднрд╛рд▓рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рд╕рд░рд▓ рдирд┐рдпрдВрддреНрд░рдХ рд▓рд┐рдЦрд╛:



grails-app/controllers/DoSomethingController.groovy





 class DoSomethingController { def receipts = { [receipts:['  ', '']] } def buy = { [places:['  ', ' тДЦ1']] } def feedback = { [feedback:['',' ',' ,  !']] } }
      
      







рдФрд░ рдЙрд╕рдХреЗ рд▓рд┐рдП рддреАрди рд╕рд░рд▓ рдкреГрд╖реНрда рдмрдирд╛рдПред рдореИрдВ рдЙрдирдореЗрдВ рд╕реЗ рдХреЗрд╡рд▓ рдПрдХ рд╣реА рджреВрдВрдЧрд╛:



grails-app/views/doSomething/receipts.gsp





 <%--   --%> <%@ page contentType="text/html;charset=UTF-8" %> <html> <head> <meta name="layout" content="main" /> </head> <body> <h1>    </h1> <ul> <g:each in="${receipts}" var="receipt"> <li>${receipt.encodeAsHTML()}</li> </g:each> </ul> </body> </html>
      
      







рдЕрдм рд╣рдорд╛рд░реЗ / do / * рд▓рд┐рдВрдХ рдкрд░ рдХрдВрдЯреНрд░реЛрд▓рд░ рд╣реИрдВрдЧ рдХрд░реЗрдВ:



grails-app/conf/UrlMappings.groovy





 class UrlMappings { static mappings = { "/do/$action?/$id?" { controller = 'doSomething' } } }
      
      







рд╣рд╛рд▓рд╛рдВрдХрд┐, рдпрд╣ рдкрд░реНрдпрд╛рдкреНрдд рдирд╣реАрдВ рд╣реИред рд╕рдорд╕реНрдпрд╛рдПрдВ рд╣реИрдВ: рд╣рдорд╛рд░реЗ рдЧреНрд░рд╛рд╣рдХ рдФрд░ рд╕рд░реНрд╡рд░ рднрд╛рдЧреЛрдВ рдХреЛ рдЕрдВрддрд┐рдо рд░реВрдк рджрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП, рдЬрд┐рд╕рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдореИрдВ рдЕрдЧрд▓реЗ рднрд╛рдЧ рдореЗрдВ рд▓рд┐рдЦреВрдВрдЧрд╛ред



All Articles