2012-04-16 44 views
5

Tôi đang tiếp tục việc học của mình cho Play 2.0 và tôi đang làm việc trên mẫu Đăng nhập. Về cơ bản các hình thức tương tự như dự án mẫu Zentasks cung cấp ...Từ ràng buộc vào đối tượng rỗng: RuntimeException: java.lang.reflect.InvocationTargetException

Vấn đề của tôi là thông báo lỗi khi không có người sử dụng có thể được tìm thấy trong cơ sở dữ liệu, lỗi xảy ra trên dòng sau:

Form<Login> loginForm = form(Login.class).bindFromRequest(); 

mẫu của tôi trông giống như:

@Entity 
public class Person extends Model { 

@Constraints.Required 
public String password; 

@Constraints.Required 
public String email; 

// -- Queries 

public static Model.Finder<String, Person> find = new Model.Finder(String.class, Person.class); 

/** 
* Authenticate a User. 
*/ 
public static Person authenticate(String email, String password) { 
Logger.info("email: " + email + " and password is:" + password); 
    return find.where().eq("email", email).eq("password", password).findUnique(); 
} 

/** 
* Retrieve all users. 
*/ 
public static List<Person> findAll() { 
return find.all(); 
} 

// -- 

} 

Và điều khiển của tôi trông giống như:

/** 
* Handle login form submission. 
*/ 
public static Result authenticate() { 
play.Logger.info("Entering authenticated method..."); 

Form<Login> loginForm = form(Login.class).bindFromRequest(); //ERROR OCCURS HERE 

if (loginForm.hasErrors()) { 
    return badRequest(views.html.login.render(loginForm)); 
} else { 
    session("email", loginForm.get().email); 
    return redirect(routes.LandingPage.index()); 
} 
} 

Và lớp Đăng nhập của tôi bên trong Application.java:

public static class Login { 

public String email; 
public String password; 

public String validate() { 
    Logger.info("Entering validation in class login... " + email + " " + password); 
    if (Person.authenticate(email, password) == null) { 
    return "Invalid user or password"; 
    } 
    return null; 
} 
} 

BTW, tôi sử dụng mySql làm cơ sở dữ liệu của mình. Và tôi có một người dùng hợp lệ mã đang làm việc tốt ...

CẬP NHẬT 17-04-2012

Nếu bạn từng gặp phải điều kỳ lạ trong Play2.0 chỉ gỡ lỗi nó một cách cẩn thận. Tôi đến từ PHP và tôi đã thử gỡ lỗi với sysouts! Nhưng điều đó không ổn. Chạy chơi gỡ lỗi chạy và nhấn F6 cho đến khi bạn biết nơi nó đi sai!

Trong trường hợp của tôi, tôi đã ghi nhật ký thứ gì đó chưa được lưu trong cơ sở dữ liệu, trên thực tế nó chưa tồn tại!

Trả lời

0

Đây có phải là một lỗi đánh máy (các tĩnh phần)?

public static class Login { 
} 

Nếu không thì đó có thể là lý do. AFAIK các lớp Biểu mẫu phải là POJO.

+0

Nếu tôi loại bỏ từ khóa tĩnh tôi nhận được lỗi biên dịch: gõ Đăng nhập không phải là thành viên của bộ điều khiển đối tượng.Application. BTW: tĩnh cũng như đã đề cập trong dự án mẫu zentask ... – adis

+1

Chỉ cần dùng thử, bạn có thể di chuyển lớp ra khỏi lớp Ứng dụng, vào tệp riêng của nó, dưới dạng lớp công khai và thử lại không? Hãy nhớ cập nhật nhập khẩu. –

+0

Hi Pierre, với Login.class riêng biệt nó vẫn không hoạt động. Nó hoạt động khi tôi sử dụng một trong các lớp Model của tôi, một lớp Person cơ bản .. Tôi không hiểu hành vi này ... – adis

Các vấn đề liên quan