Instead of 

  @Component
    private Form form;



pleases try 

@InjectComponent(value="loginForm")

private Form form;

The difference bewteen @Component and @InjectComponent is explained on the 
following page. 

http://tapestry.apache.org/injection-faq.html


Shing 



________________________________
 From: John <j...@quivinco.com>
To: users@tapestry.apache.org 
Sent: Tuesday, October 23, 2012 6:40 PM
Subject: Login page problems
 
I did a T4 project ages ago and now learning T5.

I just want to build a working login page and copied the code snippets here 
http://tapestry.apache.org/forms-and-validation.html and added them to the 
quickstart application - my versions appear below.

When I navigate to the Login page it returns:
Embedded component(s) form are defined within component class 
com.epulse.tapestrydemo.pages.Login (or a super-class of Login), but are not 
present in the component template 
(classpath:com/epulse/tapestrydemo/pages/Login.tml).

Has anyone a simple login page example that works, or can help with the above?

John



/*
* To change this template, choose Tools | Templates
* and open the template in the editor.
*/
package com.epulse.tapestrydemo.pages;

import com.epulse.tapestrydemo.security.UserAuthenticator;
import org.apache.tapestry5.annotations.Component;
import org.apache.tapestry5.annotations.InjectComponent;
import org.apache.tapestry5.annotations.Persist;
import org.apache.tapestry5.annotations.Property;
import org.apache.tapestry5.corelib.components.Form;
import org.apache.tapestry5.corelib.components.PasswordField;
import org.apache.tapestry5.ioc.annotations.Inject;

public class Login
{
    @Persist
    @Property
    private String userName;

    @Property
    private String password;

    @Inject
    private UserAuthenticator authenticator;

    @InjectComponent
    private PasswordField passwordField;

    @Component
    private Form form;

    /**
     * Do the cross-field validation
     */
    void onValidateFromForm()
    {
        if (!authenticator.isValid(userName, password))
        {
            // record an error, and thereby prevent Tapestry from emitting a 
"success" event
            form.recordError(passwordField, "Invalid user name or password.");
        }
    }

    /**
     * Validation passed, so we'll go to the "PostLogin" page
     */
    Object onSuccess()
    {
        return About.class;
    }
}


<html t:type="layout" title="Contact com.epulse"
      xmlns:t="http://tapestry.apache.org/schema/tapestry_5_3.xsd";
      xmlns:p="tapestry:parameter">

        <h1>Please Login</h1>

        <form t:type="form" t:id="loginForm">

            <t:errors/>

            <t:label for="userName"/>:
            <input t:type="TextField" t:id="userName" 
t:validate="required,minlength=3" size="30"/>
            <br/>
            <t:label for="password"/>:
            <input t:type="PasswordField" t:id="password" 
t:validate="required,minlength=3" size="30"/>
            <br/>
            <input type="submit" value="Login"/>
        </form>

</html>

Reply via email to