2016-12-09 7 views
0

I했습니다 다음 모델 :자바 주입하는 방법 2.5.10 플레이 플레이 jongo

public class Users { 

    public static PlayJongo jongo = Play.current().injector().instanceOf(PlayJongo.class); 

    public static MongoCollection users() { 
     return jongo.getCollection("DB.users"); 
    } 
.. 
.. 

public static Users authenticate(String email, String password) { 
     Users user = users().findOne("{email: #, removed: false}", email).as(Users.class); 

     if (user != null) { 
      if (HomeController.checkPassword(password, user.password)) { 
       return user; 
      } 
     } 

     return null; 
    } 
.. 

내 컨트롤러처럼 것을 사용

public Result authenticate() { 
     DynamicForm requestData = Form.form().bindFromRequest(); 
     String email = requestData.get("email").trim(); 
     String password = requestData.get("password").trim(); 
     Users user = Users.authenticate(email, password); 
     if (user == null) { 
      flash("danger", "Incorrect email or password."); 
      return redirect(routes.HomeController.login()); 
     } 
     session("email", user.getEmail()); 
     session("role", user.getRole()); 
     session("fullname", user.getLastname() + " " + user.getFirstname()); 
     session("id", user.getId().toString()); 

     return redirect(routes.HomeController.index()); 
    } 

I가 조합을 많이 시도 결과없이 play-jongo로 주사를 사용하십시오. 예 :

@Inject 
public PlayJongo jongo; 

public MongoCollection users() { 
      return jongo.getCollection("DocBox.users"); 
} 

정적/비 정적 참조 된 컨텍스트 오류의 루프에 입력합니다. 모든 정적 선언을 제거하면 Users.method으로 전화 할 수 없습니다. 내가 컨트롤러

public class HomeController extends Controller { 

    @Inject 
    public Users users; 
    . 
    . 

에 사용자를 삽입하고 사용자 메소드를 호출하려고 시도 할 경우 :

Users user = users.authenticate(email, password); 

을 나는 org.jongo.marshall.MarshallingException을받을 수 있습니다. 뇌가 확실히 과열되어 누군가가 저에게 주사를 사용하는 법을 설명 할 수 있습니까?

답변

0

나는이 문제를 해결한다. 이제 mongo 컬렉션 (authenticate, addUser, 등)에서 작동하는 메서드가 포함 된 UsersRepository를 만들었습니다. 실제 데이터 필드 (이름, 성, 전자 메일 등) 만 포함 된 사용자 개체입니다.

그 후에 나는 나의 컨트롤러에 UsersRepository를 주입 할 수 있으며 그 모든 인스턴스를 어디에서나 사용할 수 있습니다.

그렉 메빈, 테크 리드 - 플레이 프레임 워크 덕분에