2011-11-20 4 views
1

웹 사이트 모델이 있는데, @Required User owner 속성이 있습니다. 이 속성은 컨트롤러 메서드 내부에 채워집니다. 그러나 유효성 검사는 제어기 메소드를 입력 할 때 검사되므로 객체가 유효하지 않다고 판단합니다 (그 시점에서 유효하기 때문에).컨트롤러에서 강화 된 매개 변수로 유효성 검사를 사용할 수 있습니까?

플레이해야합니다! 유효성 검사는이 목적으로 사용됩니까?

그냥 @Valid 주석을 삭제하고 validation.required(website)을 사용하여 수동으로 확인해야합니까?

업데이트 - validation.required(website)을 사용하면 웹 사이트가 null이 아니고 웹 사이트의 모든 주석을 검사하지 않습니다. @Valid 매개 변수 주석을 사용하지 않는다면 모델 자체에 주석 기반 유효성 검사를 사용할 수 없다는 의미입니까? 프로그래머는 무엇을해야합니까?

업데이트 2 - validation.required(website) 대신 validation.valid(website)을 호출해야합니다. 또한 add() 메소드 매개 변수 (@Valid 대신)에 @Required 주석을 추가했습니다. 이것은 이것이 행해져 야하는 방식인가?

@Entity 
public class Website extends PortalModel { 
    @Required 
    public String url; 

    @Required 
    @ManyToOne 
    public User owner; 
} 

public class Sites extends UserAwareControllerBase { 
    public static void added(@Valid Website website) { 
     website.owner = getUser(); // from base class 

     if (Validation.hasErrors()) { 
      Validation.keep(); 
      params.flash(); 
      add(); 
     } 

     websiteRepo.save(website); 
     edit(website.id); 
    } 
} 

답변

1

귀하의 앱 사용자가 영향을받지 않는 경우 @Required로 사용자를 선언해야 할 지 모르겠습니다. 글쎄, 그것은 당신 자신의 코드를위한 안전망이다.

그러나

사용자가이 웹 사이트의 양식을 제출 매개 변수에 아니기 때문에, 당신은 수동으로 확인해야합니다 :

website.owner = getUser(); 
validation.valid(website); 
... 
+0

것은 모든 시간에 개최 잘못 해석 검증 주석의 I 종류 곳 엔티티를 그것들은 Controllers 레이어의 필터와 비슷합니다. 이러한 주석을 사용하여 지속 시간에 유효성 검사 규칙을 시행 할 수있는 방법이 있었으면합니다. 그러나 지금은'validation.valid()'가 훌륭합니다. 고마워요. – ripper234

+0

둘 다 그렇기 때문에 동일한 주석을 사용하여 Controller와 모델 내부에 주석을 달 수 있습니다. –

+0

내 모델에 주석이 달렸지 만 여전히 나쁜 오브젝트가 계속 유지됩니다. https://groups.google.com/d/msg/play-framework/MofQCKoZ9RE/2gYrX3l5lOoJ – ripper234

관련 문제