2013-08-05 6 views
0

컨트롤러 내의 양식에서 필수 필드의 유효성을 검사하려면 어떻게해야합니까? 예를 들어, 내 엔티티 creation_date 필드가 있지만 뷰에서 폼 내에서이 필드를 넣지 않아야합니다. 필자는 컨트롤러에서 볼 수 있도록 설정해야합니다. 누구든지이 작업을 수행하는 방법에 대한 예가 있습니까?Play 2.1의보기 외부에서 필수 필드를 설정하는 방법

감사합니다.

수정 : 미안하지만, 나 자신을 분명히하지 않았습니다. 나는 엔티티에 @NotNull 주석이 달린 필드를 가지고 있으며 컨트롤러 (task.setCreationDate (new Date()))의 값을 채울 필요가 있습니다. 이 필드는 뷰 범위에서 유효성을 검사 할 필요가 없습니다. 예 :

public static Result newTask() { 
    Form<Task> form = taskForm.bindFromRequest(); 
    if (form.hasErrors()) { 
     return badRequest("Error"); 
    } else { 
     Task task = form.get(); 
     task.setCreationDate(new Date()); 
     taskDAO.save(task); 
     return redirect(routes.Application.tasks()); 
    } 
} 

위 코드에서 양식은 유효성이 검사되지 않습니다 (hasErrors()를 반환합니다).

답변

0

양식 입력이 없으면 필수 입력란에 주석을 달지 않아야한다고 생각합니다. 대신이 필드를 bindFromRequest 다음에 설정하고 엔터티를 저장하기 전에이 필드를 설정합니다.

하지만 당신이 정말로 그것을 수행하려는 경우,이 같은 아마 뭔가 일할 수 : @NotNull로 주석

Form<MyEntity> myEntityForm = Form.form(MyEntity.class).bindFromRequest(); 
myEntityForm.data().put("creation_date", ...); 
+0

답장을 보내 주셔서 감사합니다.하지만 질문에 명확하지 않았습니다. 필드는 엔티티의 @NotNull이지만 양식의 필수 필드가 아니며 컨트롤러의 필드를 채 웁니다. 그러나 양식을 검색 할 때 유효하지 않습니다 (hasErrors()를 반환합니다). 나는 나의 질문을 편집하고 예를 든다. –

+0

컨트롤러에서 항상 값을 설정하려면 필드에서'@ NotNull' 주석을 제거하면됩니다. – estmatic

+0

답장을 보내 주셔서 감사합니다. –

0

갖는 필드 편리를이 DB 수준까지 구속을 전파하기 때문이다.

차라리이 두 가지 방법 중 하나를 고수 것이다 :

  1. 작업 클래스에 공공 문자열의 validate() 방법을 추가합니다. 오류가없는 경우 null을 반환하고 오류가 발생할 경우 오류 문자열을 반환해야합니다.

  2. 사용자 정의 검사기를 구현하십시오. 예를 들면 다음과 같습니다. How to create a custom validator in Play Framework 2.0?

관련 문제