On 06/06/2011 01:58 PM, Thiago H. de Paula Figueiredo wrote:
On Mon, 06 Jun 2011 14:34:20 -0300, robnangle <robnan...@gmail.com> wrote:

Eh I dont understand what you mean here. Am i not setting the user when
somebody logs in with a valid username and password?

I'm sorry, I overlooked the only place user is set. Having been using Tapestry since 5.0.5, almost four years ago, I'd say @SessionState works as it should. Your code uses too much side-effects for my taste. And I can't see the declarations of the username and password variables.


I'd have to say there is too much going on as well as omitted for an outside observer to really help much more than the suggestions that have been made by several of us to follow Tapestry standard practices

The best recommendation I could make it to make a much more simplified version, in separate pages perhaps, where all that happens is a login page -> authenticate user and establish session state -> display links depending on user type -> provide log out

Strip out any other logic like the fixtures, etc.

Here's how I might approach it (TML pages left out)

Login page class:

public class Login {
    @InjectPage
    private userIndex index;

    @Inject
     private UserDAO udao;

    @Component
    private Form login;

@Component
private TextField uname;

@Component
private PasswordField pw;

    @Property
    private String username;

    @Property
    private String password;

    public onSuccessFromLogin(){
        if(udao.validateUser( username, password )){
            return index.initialize( username );
        }else{
            login.recordError(uname, "User failed to validate!");
            return null;
        }
    }

}

UserIndex page class:

public class UserIndex {

        @SessionState(create=false)
         private User user;

        public Object initialize(String username){
            user = udao.read(username);

            return this;
        }

        @Persist @Property
        private Boolean adminUser;

        @SetupRender
        public void verifyPermissions(){
if(adminUser == null && user != null && "Admin".equalsIgnoreCase( user.getUserType() )){
                adminUser = true;
            }

             adminUser = false;
        }

        @Component
        private EventLink logout;
        @Inject
        private Request req;

        @InjectPage
        private Login login;

        public Object onLogout(){
            user = null;
            Session session = req.getSession(false);

            if(session != null)
                session.invalidate();

            return login;
        }

}

UserDAO interface class:

public interface UserDAO {
        public User read(String username);

        public boolean validate(String username, String password);
}

UserDAOImpl service class:

public class UserDAOImpl implements  UserDAO {


    public User read(String username){
            User user = null;

            Handler handler = new Handler();
            Connection conn = handler.getConnection();
            PreparedStatement prep;

            String read = "Select * from users WHERE username = ?";
            prep = conn.prepareStatement( read );
            prep.setString(1, username);

            ResultSet rs = (ResultSet) prep.executeQuery();
            while(rs.next()) {
                user = new User();

                   // TODO: set fields
            }

            return user;
     }

        public boolean validate(String username, String password){
            User user = null;

            Handler handler = new Handler();
            Connection conn = handler.getConnection();
            PreparedStatement prep;

String read = "Select * from users WHERE username = ? and password = ?";
            prep = conn.prepareStatement( read );
            prep.setString(1, username);
            prep.setString(2, password);

            ResultSet rs = (ResultSet) prep.executeQuery();

            if(rs.next()) {
                return true;
            }

             return false;
        }
}


---------------------------------------------------------------------
To unsubscribe, e-mail: users-unsubscr...@tapestry.apache.org
For additional commands, e-mail: users-h...@tapestry.apache.org

Reply via email to