]> git.mxchange.org Git - addressbook-war.git/commitdiff
Continued:
authorRoland Haeder <roland@mxchange.org>
Tue, 6 Oct 2015 12:10:03 +0000 (14:10 +0200)
committerRoland Haeder <roland@mxchange.org>
Tue, 6 Oct 2015 12:10:37 +0000 (14:10 +0200)
- the user bean (controller) needs to be updated after successful registration to bear the user id
- added new template register_done.xhtml
- removed companyName from bean as this will be handled differently
- added birthday property
- also doRegister() needs to return the updated user instance
- more language internationalized
- temporary set user account status to CONFIRMED for easier development
- many more other imrovements ... :-( I hit commit to quickly.
- updated jars
Signed-off-by:Roland Häder <roland@mxchange.org>

13 files changed:
lib/jcontacts-core.jar
lib/juser-lib.jar
src/java/org/mxchange/addressbook/beans/login/UserLoginWebBean.java
src/java/org/mxchange/addressbook/beans/register/UserRegisterWebBean.java
src/java/org/mxchange/addressbook/beans/register/UserRegisterWebController.java
src/java/org/mxchange/addressbook/beans/user/UserWebBean.java
src/java/org/mxchange/addressbook/beans/user/UserWebController.java
src/java/org/mxchange/localization/bundle_de_DE.properties
src/java/org/mxchange/localization/bundle_en_US.properties
web/WEB-INF/faces-config.xml
web/WEB-INF/templates/guest/guest_personal_data.tpl
web/WEB-INF/web.xml
web/user/register_done.xhtml [new file with mode: 0644]

index 116c3511fbfe8d060114a5877f2f106b1b8c157b..5fd68dc8f80098600ff320c77eef156f7e79d9d2 100644 (file)
Binary files a/lib/jcontacts-core.jar and b/lib/jcontacts-core.jar differ
index 60198aa1bf4e0a81b720f797d1f8d38792967c61..83cf0feae10030f1352a1c89e12ac9e5838a4d95 100644 (file)
Binary files a/lib/juser-lib.jar and b/lib/juser-lib.jar differ
index 96270270249523cc8a8abd1962fbb60f42abdf40..88cb03192aaa91e1e9d43b5e2e180382f1c08417 100644 (file)
@@ -42,7 +42,7 @@ public class UserLoginWebBean implements UserLoginWebController {
        /**
         * Reemote register session bean
         */
-       private UserLoginSessionBeanRemote login;
+       private UserLoginSessionBeanRemote loginBean;
 
        /**
         * User controller
@@ -64,7 +64,7 @@ public class UserLoginWebBean implements UserLoginWebController {
                        Context context = new InitialContext();
 
                        // Try to lookup
-                       this.login = (UserLoginSessionBeanRemote) context.lookup("ejb/stateless-login"); //NOI18N
+                       this.loginBean = (UserLoginSessionBeanRemote) context.lookup("ejb/stateless-login"); //NOI18N
                } catch (final NamingException ex) {
                        // Continue to throw
                        throw new FaceletException(ex);
@@ -78,7 +78,7 @@ public class UserLoginWebBean implements UserLoginWebController {
 
                try {
                        // Call bean
-                       this.login.loginUser(user);
+                       this.loginBean.loginUser(user);
                } catch (final UserNotFoundException | UserStatusLockedException | UserStatusUnconfirmedException ex) {
                        // Throw again
                        throw new FaceletException(ex);
index 5c7b2667f08180769f07d9e11412cce95cecee17..77cfa372479665e6910af999e64e218a7818a176 100644 (file)
@@ -27,6 +27,7 @@ import org.mxchange.addressbook.beans.user.UserWebController;
 import org.mxchange.jusercore.exceptions.UserAlreadyRegisteredException;
 import org.mxchange.jusercore.model.register.UserRegistrationSessionBeanRemote;
 import org.mxchange.jusercore.model.user.User;
+import org.mxchange.jusercore.model.user.status.UserAccountStatus;
 
 /**
  * A web bean for user registration
@@ -40,7 +41,7 @@ public class UserRegisterWebBean implements UserRegisterWebController {
        /**
         * Reemote register session bean
         */
-       private UserRegistrationSessionBeanRemote register;
+       private UserRegistrationSessionBeanRemote registerBean;
 
        /**
         * User controller
@@ -62,7 +63,7 @@ public class UserRegisterWebBean implements UserRegisterWebController {
                        Context context = new InitialContext();
 
                        // Try to lookup
-                       this.register = (UserRegistrationSessionBeanRemote) context.lookup("ejb/stateless-register"); //NOI18N
+                       this.registerBean = (UserRegistrationSessionBeanRemote) context.lookup("ejb/stateless-register"); //NOI18N
                } catch (final NamingException ex) {
                        // Continue to throw
                        throw new FaceletException(ex);
@@ -70,13 +71,22 @@ public class UserRegisterWebBean implements UserRegisterWebController {
        }
 
        @Override
-       public void doRegister () {
+       public String doRegister () {
                // Get user instance
                User user = this.userController.createUserInstance();
 
+               // For debugging/programming only:
+               user.setUserAccountStatus(UserAccountStatus.CONFIRMED);
+
                try {
                        // Call bean
-                       this.register.registerUser(user);
+                       User registeredUser = this.registerBean.registerUser(user);
+
+                       // Copy all data from registered->user
+                       this.userController.copyUser(registeredUser);
+
+                       // All fine, redirect to proper page
+                       return "register_done"; //NOI18N
                } catch (final UserAlreadyRegisteredException ex) {
                        // Continue to throw
                        throw new FaceletException(ex);
index bd27c9b34ddc2cf7a254194ebff39ac4db9325d3..0b5ceb5c5a5dec704baa27c4ea2b2f1d72019546 100644 (file)
@@ -28,6 +28,8 @@ public interface UserRegisterWebController extends Serializable {
        /**
         * Registers the user, if not found. Otherwise this method should throw an
         * exception.
+        * <p>
+        * @return Redirection target
         */
-       public void doRegister ();
+       public String doRegister ();
 }
index 6f72ab676d5a6d681aa830713d7c0fdba65116bb..5b0bdc271cc96b67360847ad9dabb111138d6c84 100644 (file)
@@ -16,6 +16,7 @@
  */
 package org.mxchange.addressbook.beans.user;
 
+import java.util.Date;
 import javax.enterprise.context.SessionScoped;
 import javax.faces.view.facelets.FaceletException;
 import javax.inject.Named;
@@ -44,6 +45,12 @@ public class UserWebBean implements UserWebController {
        private static final long serialVersionUID = 542_145_347_916L;
 
        /////////////////////// Properties /////////////////////
+
+       /**
+        * Birth day
+        */
+       private Date birthday;
+
        /**
         * Cellphone number
         */
@@ -59,11 +66,6 @@ public class UserWebBean implements UserWebController {
         */
        private String comment;
 
-       /**
-        * Company name
-        */
-       private String companyName;
-
        /**
         * Country code
         */
@@ -99,6 +101,11 @@ public class UserWebBean implements UserWebController {
         */
        private Short houseNumber;
 
+       /**
+        * User id
+        */
+       private Long userId;
+
        /**
         * Phone number
         */
@@ -149,6 +156,31 @@ public class UserWebBean implements UserWebController {
                }
        }
 
+       @Override
+       public void copyUser (final User user) {
+               // Copy all fields:
+               // - base data
+               this.setUserId(user.getUserId());
+               this.setGender(user.getUserContact().getGender());
+               this.setFirstName(user.getUserContact().getFirstName());
+               this.setFamilyName(user.getUserContact().getFamilyName());
+               this.setStreet(user.getUserContact().getStreet());
+               this.setHouseNumber(user.getUserContact().getHouseNumber());
+               this.setZipCode(user.getUserContact().getZipCode());
+               this.setCity(user.getUserContact().getCity());
+               this.setCountryCode(user.getUserContact().getCountryCode());
+
+               // - contact data
+               this.setPhoneNumber(user.getUserContact().getPhoneNumber());
+               this.setCellphoneNumber(user.getUserContact().getCellphoneNumber());
+               this.setFaxNumber(user.getUserContact().getFaxNumber());
+               this.setEmailAddress(user.getUserContact().getEmailAddress());
+
+               // -- other data
+               this.setBirthday(user.getUserContact().getBirthday());
+               this.setComment(user.getUserContact().getComment());
+       }
+
        @Override
        public User createUserInstance () {
                // User message
@@ -162,7 +194,7 @@ public class UserWebBean implements UserWebController {
                user.setUserName(this.getUserName());
 
                // Create new contact
-               Contact contact = new UserContact(this.getGender(), this.getFirstName(), this.getFamilyName(), this.getCompanyName());
+               Contact contact = new UserContact(this.getGender(), this.getFirstName(), this.getFamilyName());
                contact.setStreet(this.getStreet());
                contact.setHouseNumber(this.getHouseNumber());
                contact.setZipCode(this.getZipCode());
@@ -170,6 +202,7 @@ public class UserWebBean implements UserWebController {
                contact.setPhoneNumber(this.getPhoneNumber());
                contact.setFaxNumber(this.getFaxNumber());
                contact.setCellphoneNumber(this.getCellphoneNumber());
+               contact.setBirthday(this.getBirthday());
                contact.setComment(this.getComment());
 
                // Set contact in user
@@ -181,6 +214,16 @@ public class UserWebBean implements UserWebController {
                return user;
        }
 
+       @Override
+       public Date getBirthday () {
+               return birthday;
+       }
+
+       @Override
+       public void setBirthday (final Date birthday) {
+               this.birthday = birthday;
+       }
+
        @Override
        public String getCellphoneNumber () {
                return this.cellphoneNumber;
@@ -211,16 +254,6 @@ public class UserWebBean implements UserWebController {
                this.comment = comment;
        }
 
-       @Override
-       public String getCompanyName () {
-               return this.companyName;
-       }
-
-       @Override
-       public void setCompanyName (final String companyName) {
-               this.companyName = companyName;
-       }
-
        @Override
        public String getCountryCode () {
                return this.countryCode;
@@ -311,6 +344,16 @@ public class UserWebBean implements UserWebController {
                this.street = street;
        }
 
+       @Override
+       public Long getUserId () {
+               return this.userId;
+       }
+
+       @Override
+       public void setUserId (final Long userId) {
+               this.userId = userId;
+       }
+
        @Override
        public String getUserName () {
                return this.userName;
index c161b61aed3f410d1ef93aad2cc511cc33aeabb2..7bef48a487796cd31909dda3fe22ddfdaa3fdc0c 100644 (file)
@@ -17,6 +17,7 @@
 package org.mxchange.addressbook.beans.user;
 
 import java.io.Serializable;
+import java.util.Date;
 import org.mxchange.jcontacts.contact.gender.Gender;
 import org.mxchange.jusercore.model.user.User;
 
@@ -27,6 +28,13 @@ import org.mxchange.jusercore.model.user.User;
  */
 public interface UserWebController extends Serializable {
 
+       /**
+        * Copies given user into the controller
+        * <p>
+        * @param user User instance
+        */
+       public void copyUser (final User user);
+
        /**
         * Creates an instance from all properties
         * <p>
@@ -34,6 +42,20 @@ public interface UserWebController extends Serializable {
         */
        public User createUserInstance ();
 
+       /**
+        * Getter for birth day
+        * <p>
+        * @return Birth day
+        */
+       public Date getBirthday ();
+
+       /**
+        * Setter for birth day
+        * <p>
+        * @param birthday Birth day
+        */
+       public void setBirthday (final Date birthday);
+
        /**
         * Cellphone number
         * <p>
@@ -76,6 +98,20 @@ public interface UserWebController extends Serializable {
         */
        public void setComment (final String comment);
 
+       /**
+        * Getter for user id
+        * <p>
+        * @return User id
+        */
+       public Long getUserId ();
+
+       /**
+        * Setter for user id
+        * <p>
+        * @param userId User id
+        */
+       public void setUserId (final Long userId);
+
        /**
         * Getter for user name
         * <p>
@@ -104,20 +140,6 @@ public interface UserWebController extends Serializable {
         */
        public void setUserPassword (final String userPassword);
 
-       /**
-        * Company name
-        * <p>
-        * @return the companyName
-        */
-       public String getCompanyName ();
-
-       /**
-        * Company name
-        * <p>
-        * @param companyName the companyName to set
-        */
-       public void setCompanyName (final String companyName);
-
        /**
         * Country code
         * <p>
index 3b8d9d9a67990373c5a37ebdff6a87cc3c4d24b9..54eea798c7c4300e3c33deef7e90f9bde650d2b9 100644 (file)
@@ -61,7 +61,6 @@ PRIVACY_POLICY_NOT_ACCEPTED_MESSAGE=Bitte den Datenschutzbestimmungen zustimmen.
 TERMS_NOT_ACCEPTED_MESSAGE=Bitte den AGBs zustimmen.
 PERSONAL_DATA_MINIMUM_NOTICE=Bitte geben Sie mindestens Name, Anschrift und Telefonnummer an.
 PERSONAL_DATA_GENDER=Anrede:
-PERSONAL_DATA_COMPANY_NAME=Firmenname:
 PERSONAL_DATA_FIRST_NAME=Vorname:
 PERSONAL_DATA_FAMILY_NAME=Nachname:
 PERSONAL_DATA_STREET=Stra\u00dfe:
@@ -109,3 +108,5 @@ BUTTON_USER_LOGIN=Einloggen
 BUTTON_CONTINUE_STEP_2=Weiter zu Schritt 2
 GUEST_REGISTRATION_ENTER_USER_NAME=Benutzernamen eingeben:
 GUEST_REGISTRATION_USER_NAME_NOTICE=Der Benutzername darf nur einmal vorkommen.
+LINK_GUEST_RESENT_CONFIRMATION_LINK=Nochmals den Best\u00e4tigungslink aussenden?
+GUEST_REGISTRATION_COMPLETED=Die Anmeldung ist abgeschlossen und Ihr Account wartet auf Freischaltung. Es ist eine Email mit einem entsprechenden Best\u00e4tigungslink zu Ihnen unterwegs. Diesen m\u00fcssen Sie einmal anklicken oder in die Adresszeile des Browsers kopieren und dann aufrufen lassen. Danach ist Ihr Account freigegeben.
index 66f79f5ec778570c185d84faab35021414fc59b2..2f6c7127aef37fdc955bd06b8928e5f464ca9f9f 100644 (file)
@@ -61,7 +61,6 @@ PRIVACY_POLICY_NOT_ACCEPTED_MESSAGE=Please accept our privacy policy.
 TERMS_NOT_ACCEPTED_MESSAGE=Please accept Terms&Conditions.
 PERSONAL_DATA_MINIMUM_NOTICE=Please enter at least your name, address and phone number.
 PERSONAL_DATA_GENDER=Salutation:
-PERSONAL_DATA_COMPANY_NAME=Company name:
 PERSONAL_DATA_FIRST_NAME=First name:
 PERSONAL_DATA_FAMILY_NAME=Family name:
 PERSONAL_DATA_STREET=Street:
@@ -109,3 +108,5 @@ BUTTON_USER_LOGIN=Login
 BUTTON_CONTINUE_STEP_2=Weiter zu Schritt 2
 GUEST_REGISTRATION_ENTER_USER_NAME=Enter user name:
 GUEST_REGISTRATION_USER_NAME_NOTICE=The user name must only exist once.
+LINK_GUEST_RESENT_CONFIRMATION_LINK=Resend again the confirmation link?
+GUEST_REGISTRATION_COMPLETED=The registration is completed and your account is pending confirmation. An email has been sent to you. There you will find a confirmation link which you have to click once or copy it into your browser's address bar and call it.
index 92ee7866b16f4b28703db7c0f6ac8c93adc51142..dab471563977a7fc051b446c155cd06900d42720 100644 (file)
        </validator>
        <navigation-rule>
                <from-view-id>*</from-view-id>
-               <navigation-case>
-                       <from-outcome>user_register</from-outcome>
-                       <to-view-id>/user/register.xhtml</to-view-id>
-               </navigation-case>
                <navigation-case>
                        <from-outcome>index</from-outcome>
                        <to-view-id>/index.xhtml</to-view-id>
                </navigation-case>
                <navigation-case>
-                       <from-outcome>user_lost_passwd</from-outcome>
-                       <to-view-id>/user/lost_passwd.xhtml</to-view-id>
+                       <from-outcome>user_register</from-outcome>
+                       <to-view-id>/user/register.xhtml</to-view-id>
                </navigation-case>
                <navigation-case>
                        <from-outcome>user_login</from-outcome>
                        <to-view-id>/user/login.xhtml</to-view-id>
                </navigation-case>
+               <navigation-case>
+                       <from-outcome>user_lost_passwd</from-outcome>
+                       <to-view-id>/user/lost_passwd.xhtml</to-view-id>
+               </navigation-case>
                <navigation-case>
                        <from-outcome>terms</from-outcome>
                        <to-view-id>/terms.xhtml</to-view-id>
                        <from-outcome>logout</from-outcome>
                        <to-view-id>/bye.xhtml</to-view-id>
                </navigation-case>
-               <navigation-case>
-                       <from-outcome>admin_product</from-outcome>
-                       <to-view-id>/admin/product.xhtml</to-view-id>
-               </navigation-case>
-               <navigation-case>
-                       <from-outcome>admin_category</from-outcome>
-                       <to-view-id>/admin/category.xhtml</to-view-id>
-               </navigation-case>
                <navigation-case>
                        <from-outcome>admin_index</from-outcome>
                        <to-view-id>/admin/index.xhtml</to-view-id>
                </navigation-case>
        </navigation-rule>
+       <navigation-rule>
+               <from-view-id>/user/register.xhtml</from-view-id>
+               <navigation-case>
+                       <from-outcome>register_done</from-outcome>
+                       <to-view-id>/user/register_done.xhtml</to-view-id>
+               </navigation-case>
+       </navigation-rule>
        <navigation-rule>
                <from-view-id>/admin/admin_logout.xhtml</from-view-id>
                <navigation-case>
index f5571468e4dbf6e6d43c12c9fe9551297faa60a2..4496e88d53337dc9930006601ef2e29de4dcefbd 100644 (file)
                                <div class="clear"></div>
                        </div>
 
-                       <div class="table_row">
-                               <div class="table_left">
-                                       <h:outputLabel for="companyname" value="#{msg.PERSONAL_DATA_COMPANY_NAME}" />
-                               </div>
-
-                               <div class="table_right">
-                                       <h:inputText class="input" id="companyname" size="15" maxlength="255" value="#{userController.companyName}" />
-                               </div>
-
-                               <div class="clear"></div>
-                       </div>
-
                        <div class="table_row">
                                <div class="table_left">
                                        <h:outputLabel for="firstName" value="#{msg.PERSONAL_DATA_FIRST_NAME}" />
index ddd10b75a1b3de31d4c74d7bef4c141aa16196f0..f827361252a2efb0e689abe59ef9412e8e876433 100644 (file)
@@ -1,53 +1,69 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <web-app version="3.1" xmlns="http://xmlns.jcp.org/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd">
-       <display-name>Addressbook Application v1.0</display-name>
-       <context-param>
-               <param-name>javax.faces.PROJECT_STAGE</param-name>
-               <param-value>Development</param-value>
-       </context-param>
-       <servlet>
-               <servlet-name>Faces Servlet</servlet-name>
-               <servlet-class>javax.faces.webapp.FacesServlet</servlet-class>
-               <load-on-startup>1</load-on-startup>
-       </servlet>
-       <servlet-mapping>
-               <servlet-name>Faces Servlet</servlet-name>
-               <url-pattern>/faces/*</url-pattern>
-       </servlet-mapping>
-       <session-config>
-               <session-timeout>
+    <display-name>Addressbook Application v1.0</display-name>
+    <context-param>
+        <param-name>javax.faces.PROJECT_STAGE</param-name>
+        <param-value>Development</param-value>
+    </context-param>
+    <servlet>
+        <servlet-name>Faces Servlet</servlet-name>
+        <servlet-class>javax.faces.webapp.FacesServlet</servlet-class>
+        <load-on-startup>1</load-on-startup>
+    </servlet>
+    <servlet-mapping>
+        <servlet-name>Faces Servlet</servlet-name>
+        <url-pattern>/faces/*</url-pattern>
+    </servlet-mapping>
+    <session-config>
+        <session-timeout>
                        30
                </session-timeout>
-       </session-config>
-       <welcome-file-list>
-               <welcome-file>faces/index.xhtml</welcome-file>
-       </welcome-file-list>
-       <security-constraint>
-               <display-name>Constraint1</display-name>
-               <web-resource-collection>
-                       <web-resource-name>loginArea</web-resource-name>
-                       <description>Login area</description>
-                       <url-pattern>/llogin/*</url-pattern>
-               </web-resource-collection>
-               <auth-constraint>
-                       <description>User Authentication</description>
-                       <role-name>user</role-name>
-               </auth-constraint>
-       </security-constraint>
-       <login-config>
-               <auth-method>FORM</auth-method>
-               <realm-name>Loginbereich / Login area</realm-name>
-               <form-login-config>
-                       <form-login-page>/user/login.xhtml</form-login-page>
-                       <form-error-page>/user/login_error.xhtml</form-error-page>
-               </form-login-config>
-       </login-config>
-       <security-role>
-               <description>A logged-in user that has previously registered himself/herself.</description>
-               <role-name>user</role-name>
-       </security-role>
-       <mime-mapping>
-               <extension>tpl</extension>
-               <mime-type>text/plain</mime-type>
-       </mime-mapping>
+    </session-config>
+    <welcome-file-list>
+        <welcome-file>faces/index.xhtml</welcome-file>
+    </welcome-file-list>
+    <security-constraint>
+        <display-name>LoginConstraint</display-name>
+        <web-resource-collection>
+            <web-resource-name>loginArea</web-resource-name>
+            <description>Login area</description>
+            <url-pattern>/llogin/*</url-pattern>
+        </web-resource-collection>
+        <auth-constraint>
+            <description>User Authentication</description>
+            <role-name>user</role-name>
+        </auth-constraint>
+    </security-constraint>
+    <security-constraint>
+        <display-name>AdminConstraint</display-name>
+        <web-resource-collection>
+            <web-resource-name>admin</web-resource-name>
+            <description>Administrative area</description>
+            <url-pattern>/admin/*</url-pattern>
+        </web-resource-collection>
+        <auth-constraint>
+            <description>Admin authentication</description>
+            <role-name>admin</role-name>
+        </auth-constraint>
+    </security-constraint>
+    <login-config>
+        <auth-method>FORM</auth-method>
+        <realm-name>Loginbereich / Login area</realm-name>
+        <form-login-config>
+            <form-login-page>/user/login.xhtml</form-login-page>
+            <form-error-page>/user/login_error.xhtml</form-error-page>
+        </form-login-config>
+    </login-config>
+    <security-role>
+        <description>A logged-in user that has previously registered himself/herself.</description>
+        <role-name>user</role-name>
+    </security-role>
+    <mime-mapping>
+        <extension>tpl</extension>
+        <mime-type>text/plain</mime-type>
+    </mime-mapping>
+    <security-role>
+        <description>Administrativre rule</description>
+        <role-name>admin</role-name>
+    </security-role>
 </web-app>
diff --git a/web/user/register_done.xhtml b/web/user/register_done.xhtml
new file mode 100644 (file)
index 0000000..5214611
--- /dev/null
@@ -0,0 +1,37 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml"
+         xmlns:ui="http://java.sun.com/jsf/facelets"
+         xmlns:h="http://xmlns.jcp.org/jsf/html"
+         xmlns:c="http://xmlns.jcp.org/jsp/jstl/core"
+         xmlns:f="http://xmlns.jcp.org/jsf/core"
+         >
+
+       <ui:composition template="/WEB-INF/templates/guest/guest_base.tpl">
+               <ui:define name="title">#{msg.PAGE_TITLE_USER_REGISTER_DONE}</ui:define>
+
+               <ui:define name="menu">
+                       <ui:include id="menu" class="guest_menu" src="/WEB-INF/templates/guest/guest_menu.tpl" />
+               </ui:define>
+
+               <ui:define name="content_header">
+                       #{msg.SUB_TITLE_USER_REGISTER_DONE}
+               </ui:define>
+
+               <ui:define name="content">
+                       <div class="para">
+                               #{msg.GUEST_USER_REGISTRATION_COMPLETED}
+                       </div>
+
+                       <div class="registration_form">
+                               <h:link id="resend_link" class="resend_link" value="#{msg.LINK_GUEST_RESENT_CONFIRMATION_LINK}" outcome="resend_link">
+                                       <f:param name="user_id" value="#{userController.userId}" />
+                               </h:link>
+                       </div>
+               </ui:define>
+
+               <ui:define name="footer">
+                       <ui:include id="footer" class="guest_footer" src="/WEB-INF/templates/guest/guest_footer.tpl" />
+               </ui:define>
+       </ui:composition>
+</html>