SlideShare une entreprise Scribd logo
1  sur  46
Télécharger pour lire hors ligne
Grails tutorial
  Simple login/logout




                  http://khomkrit.wordpress.com
Part I
Create View
Prepare Artifact
Create Grails Application

       > grails create-app simple-login


and Create a Controller named user, used to
handle user activity such as login and logout.

       > grails create-controller user
Prepare Artifact

    Create a file named “index.gsp” in

    grails/views/user/ Directory
Custom Login Page
Custom the “index.gsp” file created recently
Custom Login Page
Custom the “index.gsp” file created recently




                  add some style
                      Create HTML textfield for
                         username/password
Custom Login Page
 create a form using <g:form> tag
Custom Login Page
if you don’t want to use <g:form> tag you can
use HTML form instead! Because in finally,
Grails will generate plain HTML form to you.

I prefer to use <g:form> tag, it’s make sense
and give more semantic and info about what
controller and what action will accepts from
form request.


      <g:form action=”login”/>
Custom Login Page
      <g:form action=”login”/>

send form request to action named “login”

and What Controller? If you don’t specify a
controller name it will send request to
default controller corresponding with the
name of file directory.

In this situation, index.gsp is in /grails-app/
user/ directory. So, It will send request to
user controller.
Custom Login Page

<g:form controller=”user” action=”login”/>



   Anyway, You can add the specific controller
   to which you want to sent request.
Start Grails Application by using this command


           > grails run-app


Go to http://localhost:8080/simple-login/user
Now, you cannot do anything with the form.
If you click the Login button, the error will
occurs. Why?

Because the target action specified by you in
the previous is not created.
What is the action specified by you?

Back to the login.gsp you will see this...
What is the action specified by you?

Back to the login.gsp you will see this...




                       Yes, action named “login” will
                           get the form request.
Part II
Let’s create the Action
Tip

You can make most changes, including
changes to the domain and controller classes,
without having to restart the web server.

Sometimes, however, change require a
restart. Creating a new controller sometimes
requires a restart
Let’s create the action

All action is declared in the controller file. In
this case, you want to send request to
controller named “user” and action named
“login”

go to UserController.groovy to create the
“login” action.
Custom Controller

       all Controller is in

       /grails-app/controllers/ directory
Custom Controller

Open UserController.groovy

and Create an action named “login”
Custom Controller
Go to http://localhost:8080/simple-login/user/


          and Click the Login Button
Custom Controller
OOP! Grails sent 404 back! Why?
Custom Controller
By Default, When you call any action, Grails try to
search for a file which has name corresponding
with the action name called by client.

In this case you try to http:/ /localhost:8080/
simple-login/user/login, this url means you try to
call action named “login” in the user controller

So, Grails try to find a file named “login.gsp” in /
grails-app/views/user/ directory for render to
client.

you don’t have that file!
Custom Controller
You don’t have the login.gsp file for Grails, It’s
make Grails don’t know what should to render
back to client.

You can use “render” method for tell Grails what
it should to render back.
Custom Controller
Go to http://localhost:8080/simple-login/user/


      and Click the Login Button again.
Custom Controller
Good Responding :)
Custom Controller
You can add some your logic to handle login such
as keep login status in the session and send some
message back to user like “you have logged in” or
“your login failed” in the login action.




                         You can add some logic to
                             handle login here
Part III
Add some Logic to
 Handle the Login
Validation
Add simple validation to check username and
password sent from client

all parameters sent from client is stored in
variable named “params”

So, the code will look like this...
Validation

For testing, go to login page and try to login
again.

If username is “admin” and password is “pass”
then you can login, else cannot.
Validation
Don’t You want to use ugly responding when
user try to login?

Next, After user has logged in, the Grails
application will redirect user to the login
page again and give some info using “flash”
variable.

About flash scope is out of this tutorial topic
but you can investigate that how to use flash
through this tutorial.
Using flash
use flash variable to store some message as
the following code and redirect to the login
page (index.gsp) .
Using flash
redirecting user to action named “index” .By
default, Grails will search for file named
“index.gsp” in grails-app/views/user/ directory.

flash message sent to action named “index” by
the last command in login action and also
through to index.gsp

So, You can access the flash message in action
named “index” and also access it in “index.gsp”
Using flash
Add ${flash.message} in login page If it has
something in, it will show message




 To display value in a variable you can use
 this pattern ${variable-name}
Using flash
       Testing, Go to login page and try to login
       again.




After try to login, you will see value in
 flash.message sent from login action.
Keep Status

You can use “session” to keep information
about login status.




                       Keep some info by
                      using session variable
Handle Logout
Create a new action named “logout” to handle when
user want to logout.

session.user keep status that the user has logged
in, so you should clear all info about logged in user.




                                  New action
Custom Login page
Add some logic more, if user has logged in then
do not show login form and show a logout link
instead.

Use <g:if>, <g:else> tag to test something.
Custom Login page
Using <g:if> tag

     <g:if test=”${boolean-logic}”>



Example:

           <g:if test=”${5 == 6}”>
Custom Login page

Creating a link to logout action, you can use
<g:link> as the following.
Custom Login page
  Anyway, you can use HTML link tag - <a href=””> ,
  instead. But I prefer to use <g:link> with the same
  reason of why I prefer to use <g:form>


        <g:link controller=”” action=””>

If you do not specify controller name, Grails will
automatic search for controller like <g:form> behavior.

               <g:link action=””>
Check Point!
Now you have a login page.

If you login succeed, You can see a logout link
and the login form has thrown away.

If you login fail, the login form still be with you.

After you try to login, Whatever the result is fail
or succeed have you got. You always see a flash
message.
Add some more thing
Grails has a default CSS and you can use its
like the following.


                            Use build in CSS,
                            class=”message”
Add some more thing
As you can see, the style has applied to
flash.message value
Add some more thing


For another style, you can see in the /web-
app/css/ directory

Other resource is in /web-app/images/ and
web-app/js directory
Q/A
Have any Question?
Thank You

Sorry about many wrong grammar in this
slide :D

Contenu connexe

Tendances

Sling models by Justin Edelson
Sling models by Justin Edelson Sling models by Justin Edelson
Sling models by Justin Edelson AEM HUB
 
PyCon KR 2018 Effective Tips for Django ORM in Practice
PyCon KR 2018 Effective Tips for Django ORM in PracticePyCon KR 2018 Effective Tips for Django ORM in Practice
PyCon KR 2018 Effective Tips for Django ORM in PracticeSeomgi Han
 
AEM and Sling
AEM and SlingAEM and Sling
AEM and SlingLo Ki
 
Grails GORM - You Know SQL. You Know Queries. Here's GORM.
Grails GORM - You Know SQL. You Know Queries. Here's GORM.Grails GORM - You Know SQL. You Know Queries. Here's GORM.
Grails GORM - You Know SQL. You Know Queries. Here's GORM.Ted Vinke
 
Lab #2: Introduction to Javascript
Lab #2: Introduction to JavascriptLab #2: Introduction to Javascript
Lab #2: Introduction to JavascriptWalid Ashraf
 
Introduction to web programming with JavaScript
Introduction to web programming with JavaScriptIntroduction to web programming with JavaScript
Introduction to web programming with JavaScriptT11 Sessions
 
Understanding Sling Models in AEM
Understanding Sling Models in AEMUnderstanding Sling Models in AEM
Understanding Sling Models in AEMAccunity Software
 
jQuery -Chapter 2 - Selectors and Events
jQuery -Chapter 2 - Selectors and Events jQuery -Chapter 2 - Selectors and Events
jQuery -Chapter 2 - Selectors and Events WebStackAcademy
 
HTL(Sightly) - All you need to know
HTL(Sightly) - All you need to knowHTL(Sightly) - All you need to know
HTL(Sightly) - All you need to knowPrabhdeep Singh
 
JavaScript Programming
JavaScript ProgrammingJavaScript Programming
JavaScript ProgrammingSehwan Noh
 
Introduction to Grails Framework
Introduction to Grails FrameworkIntroduction to Grails Framework
Introduction to Grails FrameworkPT.JUG
 
The effective use of Django ORM
The effective use of Django ORMThe effective use of Django ORM
The effective use of Django ORMYaroslav Muravskyi
 
The six key steps to AEM architecture
The six key steps to AEM architectureThe six key steps to AEM architecture
The six key steps to AEM architectureAshokkumar T A
 

Tendances (20)

Javascript
JavascriptJavascript
Javascript
 
Sling models by Justin Edelson
Sling models by Justin Edelson Sling models by Justin Edelson
Sling models by Justin Edelson
 
PyCon KR 2018 Effective Tips for Django ORM in Practice
PyCon KR 2018 Effective Tips for Django ORM in PracticePyCon KR 2018 Effective Tips for Django ORM in Practice
PyCon KR 2018 Effective Tips for Django ORM in Practice
 
Javascript basics
Javascript basicsJavascript basics
Javascript basics
 
Javascript essentials
Javascript essentialsJavascript essentials
Javascript essentials
 
AEM and Sling
AEM and SlingAEM and Sling
AEM and Sling
 
Grails GORM - You Know SQL. You Know Queries. Here's GORM.
Grails GORM - You Know SQL. You Know Queries. Here's GORM.Grails GORM - You Know SQL. You Know Queries. Here's GORM.
Grails GORM - You Know SQL. You Know Queries. Here's GORM.
 
Broadleaf Presents Thymeleaf
Broadleaf Presents ThymeleafBroadleaf Presents Thymeleaf
Broadleaf Presents Thymeleaf
 
Angular Data Binding
Angular Data BindingAngular Data Binding
Angular Data Binding
 
Lab #2: Introduction to Javascript
Lab #2: Introduction to JavascriptLab #2: Introduction to Javascript
Lab #2: Introduction to Javascript
 
Introduction to web programming with JavaScript
Introduction to web programming with JavaScriptIntroduction to web programming with JavaScript
Introduction to web programming with JavaScript
 
Understanding Sling Models in AEM
Understanding Sling Models in AEMUnderstanding Sling Models in AEM
Understanding Sling Models in AEM
 
jQuery for beginners
jQuery for beginnersjQuery for beginners
jQuery for beginners
 
jQuery -Chapter 2 - Selectors and Events
jQuery -Chapter 2 - Selectors and Events jQuery -Chapter 2 - Selectors and Events
jQuery -Chapter 2 - Selectors and Events
 
HTL(Sightly) - All you need to know
HTL(Sightly) - All you need to knowHTL(Sightly) - All you need to know
HTL(Sightly) - All you need to know
 
jQuery
jQueryjQuery
jQuery
 
JavaScript Programming
JavaScript ProgrammingJavaScript Programming
JavaScript Programming
 
Introduction to Grails Framework
Introduction to Grails FrameworkIntroduction to Grails Framework
Introduction to Grails Framework
 
The effective use of Django ORM
The effective use of Django ORMThe effective use of Django ORM
The effective use of Django ORM
 
The six key steps to AEM architecture
The six key steps to AEM architectureThe six key steps to AEM architecture
The six key steps to AEM architecture
 

En vedette

Application Architectures in Grails
Application Architectures in GrailsApplication Architectures in Grails
Application Architectures in GrailsPeter Ledbrook
 
No Container: a Modern Java Stack with Bootique
No Container: a Modern Java Stack with BootiqueNo Container: a Modern Java Stack with Bootique
No Container: a Modern Java Stack with BootiqueAndrus Adamchik
 
Java training in Bhubaneswar
Java training in BhubaneswarJava training in Bhubaneswar
Java training in Bhubaneswarjavalit
 
Image compression: Techniques and Application
Image compression: Techniques and ApplicationImage compression: Techniques and Application
Image compression: Techniques and ApplicationNidhi Baranwal
 
Contrast limited adaptive histogram equalization
Contrast limited adaptive histogram equalizationContrast limited adaptive histogram equalization
Contrast limited adaptive histogram equalizationEr. Nancy
 
Nielsen company overview
Nielsen company overviewNielsen company overview
Nielsen company overviewfenist
 
How to generate customized java 8 code from your database
How to generate customized java 8 code from your databaseHow to generate customized java 8 code from your database
How to generate customized java 8 code from your databaseSpeedment, Inc.
 
Image pre processing-restoration
Image pre processing-restorationImage pre processing-restoration
Image pre processing-restorationAshish Kumar
 
Image Processing (General Topic)
Image Processing (General Topic)Image Processing (General Topic)
Image Processing (General Topic)mcc.jeppiaar
 
Spandana image processing and compression techniques (7840228)
Spandana   image processing and compression techniques (7840228)Spandana   image processing and compression techniques (7840228)
Spandana image processing and compression techniques (7840228)indianspandana
 
BigData: AWS RedShift with S3, EC2
BigData: AWS RedShift with S3, EC2BigData: AWS RedShift with S3, EC2
BigData: AWS RedShift with S3, EC2Paulraj Pappaiah
 
Cassandra under the hood
Cassandra under the hoodCassandra under the hood
Cassandra under the hoodAndriy Rymar
 

En vedette (20)

Grails Overview
Grails OverviewGrails Overview
Grails Overview
 
Application Architectures in Grails
Application Architectures in GrailsApplication Architectures in Grails
Application Architectures in Grails
 
Introduction to Grails
Introduction to GrailsIntroduction to Grails
Introduction to Grails
 
No Container: a Modern Java Stack with Bootique
No Container: a Modern Java Stack with BootiqueNo Container: a Modern Java Stack with Bootique
No Container: a Modern Java Stack with Bootique
 
Devoxx
DevoxxDevoxx
Devoxx
 
Java training in Bhubaneswar
Java training in BhubaneswarJava training in Bhubaneswar
Java training in Bhubaneswar
 
Gorm
GormGorm
Gorm
 
Image compression: Techniques and Application
Image compression: Techniques and ApplicationImage compression: Techniques and Application
Image compression: Techniques and Application
 
Image compression .
Image compression .Image compression .
Image compression .
 
Contrast limited adaptive histogram equalization
Contrast limited adaptive histogram equalizationContrast limited adaptive histogram equalization
Contrast limited adaptive histogram equalization
 
Nielsen company overview
Nielsen company overviewNielsen company overview
Nielsen company overview
 
How to generate customized java 8 code from your database
How to generate customized java 8 code from your databaseHow to generate customized java 8 code from your database
How to generate customized java 8 code from your database
 
Image pre processing-restoration
Image pre processing-restorationImage pre processing-restoration
Image pre processing-restoration
 
Image Processing (General Topic)
Image Processing (General Topic)Image Processing (General Topic)
Image Processing (General Topic)
 
Spandana image processing and compression techniques (7840228)
Spandana   image processing and compression techniques (7840228)Spandana   image processing and compression techniques (7840228)
Spandana image processing and compression techniques (7840228)
 
JPEG Image Compression
JPEG Image CompressionJPEG Image Compression
JPEG Image Compression
 
BigData: AWS RedShift with S3, EC2
BigData: AWS RedShift with S3, EC2BigData: AWS RedShift with S3, EC2
BigData: AWS RedShift with S3, EC2
 
Image Compression
Image CompressionImage Compression
Image Compression
 
Cassandra under the hood
Cassandra under the hoodCassandra under the hood
Cassandra under the hood
 
Image compression
Image compressionImage compression
Image compression
 

Similaire à Grails Simple Login

How To: Use Google Search Ap Is On Your Blog
How To: Use Google Search Ap Is On Your BlogHow To: Use Google Search Ap Is On Your Blog
How To: Use Google Search Ap Is On Your Blogmutex07
 
RSpec User Stories
RSpec User StoriesRSpec User Stories
RSpec User Storiesrahoulb
 
What's new in Rails 2?
What's new in Rails 2?What's new in Rails 2?
What's new in Rails 2?brynary
 
OSDC 2009 Rails Turtorial
OSDC 2009 Rails TurtorialOSDC 2009 Rails Turtorial
OSDC 2009 Rails TurtorialYi-Ting Cheng
 
Lab StepsSTEP 1 Login Form1. In order to do this lab, we need.docx
Lab StepsSTEP 1 Login Form1. In order to do this lab, we need.docxLab StepsSTEP 1 Login Form1. In order to do this lab, we need.docx
Lab StepsSTEP 1 Login Form1. In order to do this lab, we need.docxsmile790243
 
Aug Xml Net Forum Dynamics Integration
Aug Xml Net Forum Dynamics IntegrationAug Xml Net Forum Dynamics Integration
Aug Xml Net Forum Dynamics IntegrationMariAnne Woehrle
 
Grails 0.3-SNAPSHOT Presentation WJAX 2006 English
Grails 0.3-SNAPSHOT Presentation WJAX 2006 EnglishGrails 0.3-SNAPSHOT Presentation WJAX 2006 English
Grails 0.3-SNAPSHOT Presentation WJAX 2006 EnglishSven Haiges
 
Introduce cucumber
Introduce cucumberIntroduce cucumber
Introduce cucumberBachue Zhou
 
Gadgets Intro (Plus Mapplets)
Gadgets Intro (Plus Mapplets)Gadgets Intro (Plus Mapplets)
Gadgets Intro (Plus Mapplets)Pamela Fox
 
Cis407 a ilab 6 web application development devry university
Cis407 a ilab 6 web application development devry universityCis407 a ilab 6 web application development devry university
Cis407 a ilab 6 web application development devry universitylhkslkdh89009
 
Angular 11 google social login or sign in tutorial using angularx social-login
Angular 11 google social login or sign in tutorial using angularx social-loginAngular 11 google social login or sign in tutorial using angularx social-login
Angular 11 google social login or sign in tutorial using angularx social-loginKaty Slemon
 
Zend - Installation And Sample Project Creation
Zend - Installation And Sample Project Creation Zend - Installation And Sample Project Creation
Zend - Installation And Sample Project Creation Compare Infobase Limited
 
Rails Plugins - Linux For You, March 2011 Issue
Rails Plugins - Linux For You, March 2011 IssueRails Plugins - Linux For You, March 2011 Issue
Rails Plugins - Linux For You, March 2011 IssueSagar Arlekar
 
Periscopix presentation
Periscopix presentationPeriscopix presentation
Periscopix presentationJamieCluett
 
Developing and testing ajax components
Developing and testing ajax componentsDeveloping and testing ajax components
Developing and testing ajax componentsIgnacio Coloma
 
Testing C# and ASP.net using Ruby
Testing C# and ASP.net using RubyTesting C# and ASP.net using Ruby
Testing C# and ASP.net using RubyBen Hall
 
Working Effectively With Legacy Code
Working Effectively With Legacy CodeWorking Effectively With Legacy Code
Working Effectively With Legacy Codescidept
 

Similaire à Grails Simple Login (20)

How To: Use Google Search Ap Is On Your Blog
How To: Use Google Search Ap Is On Your BlogHow To: Use Google Search Ap Is On Your Blog
How To: Use Google Search Ap Is On Your Blog
 
RSpec User Stories
RSpec User StoriesRSpec User Stories
RSpec User Stories
 
What's new in Rails 2?
What's new in Rails 2?What's new in Rails 2?
What's new in Rails 2?
 
OSDC 2009 Rails Turtorial
OSDC 2009 Rails TurtorialOSDC 2009 Rails Turtorial
OSDC 2009 Rails Turtorial
 
Lab StepsSTEP 1 Login Form1. In order to do this lab, we need.docx
Lab StepsSTEP 1 Login Form1. In order to do this lab, we need.docxLab StepsSTEP 1 Login Form1. In order to do this lab, we need.docx
Lab StepsSTEP 1 Login Form1. In order to do this lab, we need.docx
 
Aug Xml Net Forum Dynamics Integration
Aug Xml Net Forum Dynamics IntegrationAug Xml Net Forum Dynamics Integration
Aug Xml Net Forum Dynamics Integration
 
Grails Advanced
Grails Advanced Grails Advanced
Grails Advanced
 
Grails 0.3-SNAPSHOT Presentation WJAX 2006 English
Grails 0.3-SNAPSHOT Presentation WJAX 2006 EnglishGrails 0.3-SNAPSHOT Presentation WJAX 2006 English
Grails 0.3-SNAPSHOT Presentation WJAX 2006 English
 
Introduce cucumber
Introduce cucumberIntroduce cucumber
Introduce cucumber
 
Gadgets Intro (Plus Mapplets)
Gadgets Intro (Plus Mapplets)Gadgets Intro (Plus Mapplets)
Gadgets Intro (Plus Mapplets)
 
Cis407 a ilab 6 web application development devry university
Cis407 a ilab 6 web application development devry universityCis407 a ilab 6 web application development devry university
Cis407 a ilab 6 web application development devry university
 
Angular 11 google social login or sign in tutorial using angularx social-login
Angular 11 google social login or sign in tutorial using angularx social-loginAngular 11 google social login or sign in tutorial using angularx social-login
Angular 11 google social login or sign in tutorial using angularx social-login
 
Grails and Dojo
Grails and DojoGrails and Dojo
Grails and Dojo
 
Zend - Installation And Sample Project Creation
Zend - Installation And Sample Project Creation Zend - Installation And Sample Project Creation
Zend - Installation And Sample Project Creation
 
Rails Plugins - Linux For You, March 2011 Issue
Rails Plugins - Linux For You, March 2011 IssueRails Plugins - Linux For You, March 2011 Issue
Rails Plugins - Linux For You, March 2011 Issue
 
Google App Engine tutorial
Google App Engine tutorialGoogle App Engine tutorial
Google App Engine tutorial
 
Periscopix presentation
Periscopix presentationPeriscopix presentation
Periscopix presentation
 
Developing and testing ajax components
Developing and testing ajax componentsDeveloping and testing ajax components
Developing and testing ajax components
 
Testing C# and ASP.net using Ruby
Testing C# and ASP.net using RubyTesting C# and ASP.net using Ruby
Testing C# and ASP.net using Ruby
 
Working Effectively With Legacy Code
Working Effectively With Legacy CodeWorking Effectively With Legacy Code
Working Effectively With Legacy Code
 

Dernier

2k Shots ≽ 9205541914 ≼ Call Girls In Jasola (Delhi)
2k Shots ≽ 9205541914 ≼ Call Girls In Jasola (Delhi)2k Shots ≽ 9205541914 ≼ Call Girls In Jasola (Delhi)
2k Shots ≽ 9205541914 ≼ Call Girls In Jasola (Delhi)Delhi Call girls
 
9892124323, Call Girls in mumbai, Vashi Call Girls , Kurla Call girls
9892124323, Call Girls in mumbai, Vashi Call Girls , Kurla Call girls9892124323, Call Girls in mumbai, Vashi Call Girls , Kurla Call girls
9892124323, Call Girls in mumbai, Vashi Call Girls , Kurla Call girlsPooja Nehwal
 
Top Rated Pune Call Girls Tingre Nagar ⟟ 6297143586 ⟟ Call Me For Genuine Se...
Top Rated  Pune Call Girls Tingre Nagar ⟟ 6297143586 ⟟ Call Me For Genuine Se...Top Rated  Pune Call Girls Tingre Nagar ⟟ 6297143586 ⟟ Call Me For Genuine Se...
Top Rated Pune Call Girls Tingre Nagar ⟟ 6297143586 ⟟ Call Me For Genuine Se...Call Girls in Nagpur High Profile
 
WOMEN EMPOWERMENT women empowerment.pptx
WOMEN EMPOWERMENT women empowerment.pptxWOMEN EMPOWERMENT women empowerment.pptx
WOMEN EMPOWERMENT women empowerment.pptxpadhand000
 
LC_YouSaidYes_NewBelieverBookletDone.pdf
LC_YouSaidYes_NewBelieverBookletDone.pdfLC_YouSaidYes_NewBelieverBookletDone.pdf
LC_YouSaidYes_NewBelieverBookletDone.pdfpastor83
 
2k Shots ≽ 9205541914 ≼ Call Girls In Palam (Delhi)
2k Shots ≽ 9205541914 ≼ Call Girls In Palam (Delhi)2k Shots ≽ 9205541914 ≼ Call Girls In Palam (Delhi)
2k Shots ≽ 9205541914 ≼ Call Girls In Palam (Delhi)Delhi Call girls
 
$ Love Spells^ 💎 (310) 882-6330 in West Virginia, WV | Psychic Reading Best B...
$ Love Spells^ 💎 (310) 882-6330 in West Virginia, WV | Psychic Reading Best B...$ Love Spells^ 💎 (310) 882-6330 in West Virginia, WV | Psychic Reading Best B...
$ Love Spells^ 💎 (310) 882-6330 in West Virginia, WV | Psychic Reading Best B...PsychicRuben LoveSpells
 
8377087607 Full Enjoy @24/7-CLEAN-Call Girls In Chhatarpur,
8377087607 Full Enjoy @24/7-CLEAN-Call Girls In Chhatarpur,8377087607 Full Enjoy @24/7-CLEAN-Call Girls In Chhatarpur,
8377087607 Full Enjoy @24/7-CLEAN-Call Girls In Chhatarpur,dollysharma2066
 
call Now 9811711561 Cash Payment乂 Call Girls in Dwarka Mor
call Now 9811711561 Cash Payment乂 Call Girls in Dwarka Morcall Now 9811711561 Cash Payment乂 Call Girls in Dwarka Mor
call Now 9811711561 Cash Payment乂 Call Girls in Dwarka Morvikas rana
 
2k Shots ≽ 9205541914 ≼ Call Girls In Mukherjee Nagar (Delhi)
2k Shots ≽ 9205541914 ≼ Call Girls In Mukherjee Nagar (Delhi)2k Shots ≽ 9205541914 ≼ Call Girls In Mukherjee Nagar (Delhi)
2k Shots ≽ 9205541914 ≼ Call Girls In Mukherjee Nagar (Delhi)Delhi Call girls
 
2k Shots ≽ 9205541914 ≼ Call Girls In Dashrath Puri (Delhi)
2k Shots ≽ 9205541914 ≼ Call Girls In Dashrath Puri (Delhi)2k Shots ≽ 9205541914 ≼ Call Girls In Dashrath Puri (Delhi)
2k Shots ≽ 9205541914 ≼ Call Girls In Dashrath Puri (Delhi)Delhi Call girls
 
Pokemon Go... Unraveling the Conspiracy Theory
Pokemon Go... Unraveling the Conspiracy TheoryPokemon Go... Unraveling the Conspiracy Theory
Pokemon Go... Unraveling the Conspiracy Theorydrae5
 
The Selfspace Journal Preview by Mindbrush
The Selfspace Journal Preview by MindbrushThe Selfspace Journal Preview by Mindbrush
The Selfspace Journal Preview by MindbrushShivain97
 

Dernier (15)

(Anamika) VIP Call Girls Navi Mumbai Call Now 8250077686 Navi Mumbai Escorts ...
(Anamika) VIP Call Girls Navi Mumbai Call Now 8250077686 Navi Mumbai Escorts ...(Anamika) VIP Call Girls Navi Mumbai Call Now 8250077686 Navi Mumbai Escorts ...
(Anamika) VIP Call Girls Navi Mumbai Call Now 8250077686 Navi Mumbai Escorts ...
 
2k Shots ≽ 9205541914 ≼ Call Girls In Jasola (Delhi)
2k Shots ≽ 9205541914 ≼ Call Girls In Jasola (Delhi)2k Shots ≽ 9205541914 ≼ Call Girls In Jasola (Delhi)
2k Shots ≽ 9205541914 ≼ Call Girls In Jasola (Delhi)
 
9892124323, Call Girls in mumbai, Vashi Call Girls , Kurla Call girls
9892124323, Call Girls in mumbai, Vashi Call Girls , Kurla Call girls9892124323, Call Girls in mumbai, Vashi Call Girls , Kurla Call girls
9892124323, Call Girls in mumbai, Vashi Call Girls , Kurla Call girls
 
Top Rated Pune Call Girls Tingre Nagar ⟟ 6297143586 ⟟ Call Me For Genuine Se...
Top Rated  Pune Call Girls Tingre Nagar ⟟ 6297143586 ⟟ Call Me For Genuine Se...Top Rated  Pune Call Girls Tingre Nagar ⟟ 6297143586 ⟟ Call Me For Genuine Se...
Top Rated Pune Call Girls Tingre Nagar ⟟ 6297143586 ⟟ Call Me For Genuine Se...
 
WOMEN EMPOWERMENT women empowerment.pptx
WOMEN EMPOWERMENT women empowerment.pptxWOMEN EMPOWERMENT women empowerment.pptx
WOMEN EMPOWERMENT women empowerment.pptx
 
LC_YouSaidYes_NewBelieverBookletDone.pdf
LC_YouSaidYes_NewBelieverBookletDone.pdfLC_YouSaidYes_NewBelieverBookletDone.pdf
LC_YouSaidYes_NewBelieverBookletDone.pdf
 
2k Shots ≽ 9205541914 ≼ Call Girls In Palam (Delhi)
2k Shots ≽ 9205541914 ≼ Call Girls In Palam (Delhi)2k Shots ≽ 9205541914 ≼ Call Girls In Palam (Delhi)
2k Shots ≽ 9205541914 ≼ Call Girls In Palam (Delhi)
 
$ Love Spells^ 💎 (310) 882-6330 in West Virginia, WV | Psychic Reading Best B...
$ Love Spells^ 💎 (310) 882-6330 in West Virginia, WV | Psychic Reading Best B...$ Love Spells^ 💎 (310) 882-6330 in West Virginia, WV | Psychic Reading Best B...
$ Love Spells^ 💎 (310) 882-6330 in West Virginia, WV | Psychic Reading Best B...
 
8377087607 Full Enjoy @24/7-CLEAN-Call Girls In Chhatarpur,
8377087607 Full Enjoy @24/7-CLEAN-Call Girls In Chhatarpur,8377087607 Full Enjoy @24/7-CLEAN-Call Girls In Chhatarpur,
8377087607 Full Enjoy @24/7-CLEAN-Call Girls In Chhatarpur,
 
(Aarini) Russian Call Girls Surat Call Now 8250077686 Surat Escorts 24x7
(Aarini) Russian Call Girls Surat Call Now 8250077686 Surat Escorts 24x7(Aarini) Russian Call Girls Surat Call Now 8250077686 Surat Escorts 24x7
(Aarini) Russian Call Girls Surat Call Now 8250077686 Surat Escorts 24x7
 
call Now 9811711561 Cash Payment乂 Call Girls in Dwarka Mor
call Now 9811711561 Cash Payment乂 Call Girls in Dwarka Morcall Now 9811711561 Cash Payment乂 Call Girls in Dwarka Mor
call Now 9811711561 Cash Payment乂 Call Girls in Dwarka Mor
 
2k Shots ≽ 9205541914 ≼ Call Girls In Mukherjee Nagar (Delhi)
2k Shots ≽ 9205541914 ≼ Call Girls In Mukherjee Nagar (Delhi)2k Shots ≽ 9205541914 ≼ Call Girls In Mukherjee Nagar (Delhi)
2k Shots ≽ 9205541914 ≼ Call Girls In Mukherjee Nagar (Delhi)
 
2k Shots ≽ 9205541914 ≼ Call Girls In Dashrath Puri (Delhi)
2k Shots ≽ 9205541914 ≼ Call Girls In Dashrath Puri (Delhi)2k Shots ≽ 9205541914 ≼ Call Girls In Dashrath Puri (Delhi)
2k Shots ≽ 9205541914 ≼ Call Girls In Dashrath Puri (Delhi)
 
Pokemon Go... Unraveling the Conspiracy Theory
Pokemon Go... Unraveling the Conspiracy TheoryPokemon Go... Unraveling the Conspiracy Theory
Pokemon Go... Unraveling the Conspiracy Theory
 
The Selfspace Journal Preview by Mindbrush
The Selfspace Journal Preview by MindbrushThe Selfspace Journal Preview by Mindbrush
The Selfspace Journal Preview by Mindbrush
 

Grails Simple Login

  • 1. Grails tutorial Simple login/logout http://khomkrit.wordpress.com
  • 3. Prepare Artifact Create Grails Application > grails create-app simple-login and Create a Controller named user, used to handle user activity such as login and logout. > grails create-controller user
  • 4. Prepare Artifact Create a file named “index.gsp” in grails/views/user/ Directory
  • 5. Custom Login Page Custom the “index.gsp” file created recently
  • 6. Custom Login Page Custom the “index.gsp” file created recently add some style Create HTML textfield for username/password
  • 7. Custom Login Page create a form using <g:form> tag
  • 8. Custom Login Page if you don’t want to use <g:form> tag you can use HTML form instead! Because in finally, Grails will generate plain HTML form to you. I prefer to use <g:form> tag, it’s make sense and give more semantic and info about what controller and what action will accepts from form request. <g:form action=”login”/>
  • 9. Custom Login Page <g:form action=”login”/> send form request to action named “login” and What Controller? If you don’t specify a controller name it will send request to default controller corresponding with the name of file directory. In this situation, index.gsp is in /grails-app/ user/ directory. So, It will send request to user controller.
  • 10. Custom Login Page <g:form controller=”user” action=”login”/> Anyway, You can add the specific controller to which you want to sent request.
  • 11. Start Grails Application by using this command > grails run-app Go to http://localhost:8080/simple-login/user
  • 12. Now, you cannot do anything with the form. If you click the Login button, the error will occurs. Why? Because the target action specified by you in the previous is not created.
  • 13. What is the action specified by you? Back to the login.gsp you will see this...
  • 14. What is the action specified by you? Back to the login.gsp you will see this... Yes, action named “login” will get the form request.
  • 16. Tip You can make most changes, including changes to the domain and controller classes, without having to restart the web server. Sometimes, however, change require a restart. Creating a new controller sometimes requires a restart
  • 17. Let’s create the action All action is declared in the controller file. In this case, you want to send request to controller named “user” and action named “login” go to UserController.groovy to create the “login” action.
  • 18. Custom Controller all Controller is in /grails-app/controllers/ directory
  • 19. Custom Controller Open UserController.groovy and Create an action named “login”
  • 20. Custom Controller Go to http://localhost:8080/simple-login/user/ and Click the Login Button
  • 21. Custom Controller OOP! Grails sent 404 back! Why?
  • 22. Custom Controller By Default, When you call any action, Grails try to search for a file which has name corresponding with the action name called by client. In this case you try to http:/ /localhost:8080/ simple-login/user/login, this url means you try to call action named “login” in the user controller So, Grails try to find a file named “login.gsp” in / grails-app/views/user/ directory for render to client. you don’t have that file!
  • 23. Custom Controller You don’t have the login.gsp file for Grails, It’s make Grails don’t know what should to render back to client. You can use “render” method for tell Grails what it should to render back.
  • 24. Custom Controller Go to http://localhost:8080/simple-login/user/ and Click the Login Button again.
  • 26. Custom Controller You can add some your logic to handle login such as keep login status in the session and send some message back to user like “you have logged in” or “your login failed” in the login action. You can add some logic to handle login here
  • 27. Part III Add some Logic to Handle the Login
  • 28. Validation Add simple validation to check username and password sent from client all parameters sent from client is stored in variable named “params” So, the code will look like this...
  • 29. Validation For testing, go to login page and try to login again. If username is “admin” and password is “pass” then you can login, else cannot.
  • 30. Validation Don’t You want to use ugly responding when user try to login? Next, After user has logged in, the Grails application will redirect user to the login page again and give some info using “flash” variable. About flash scope is out of this tutorial topic but you can investigate that how to use flash through this tutorial.
  • 31. Using flash use flash variable to store some message as the following code and redirect to the login page (index.gsp) .
  • 32. Using flash redirecting user to action named “index” .By default, Grails will search for file named “index.gsp” in grails-app/views/user/ directory. flash message sent to action named “index” by the last command in login action and also through to index.gsp So, You can access the flash message in action named “index” and also access it in “index.gsp”
  • 33. Using flash Add ${flash.message} in login page If it has something in, it will show message To display value in a variable you can use this pattern ${variable-name}
  • 34. Using flash Testing, Go to login page and try to login again. After try to login, you will see value in flash.message sent from login action.
  • 35. Keep Status You can use “session” to keep information about login status. Keep some info by using session variable
  • 36. Handle Logout Create a new action named “logout” to handle when user want to logout. session.user keep status that the user has logged in, so you should clear all info about logged in user. New action
  • 37. Custom Login page Add some logic more, if user has logged in then do not show login form and show a logout link instead. Use <g:if>, <g:else> tag to test something.
  • 38. Custom Login page Using <g:if> tag <g:if test=”${boolean-logic}”> Example: <g:if test=”${5 == 6}”>
  • 39. Custom Login page Creating a link to logout action, you can use <g:link> as the following.
  • 40. Custom Login page Anyway, you can use HTML link tag - <a href=””> , instead. But I prefer to use <g:link> with the same reason of why I prefer to use <g:form> <g:link controller=”” action=””> If you do not specify controller name, Grails will automatic search for controller like <g:form> behavior. <g:link action=””>
  • 41. Check Point! Now you have a login page. If you login succeed, You can see a logout link and the login form has thrown away. If you login fail, the login form still be with you. After you try to login, Whatever the result is fail or succeed have you got. You always see a flash message.
  • 42. Add some more thing Grails has a default CSS and you can use its like the following. Use build in CSS, class=”message”
  • 43. Add some more thing As you can see, the style has applied to flash.message value
  • 44. Add some more thing For another style, you can see in the /web- app/css/ directory Other resource is in /web-app/images/ and web-app/js directory
  • 46. Thank You Sorry about many wrong grammar in this slide :D