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