2017-12-30 50 views
0

Play 2.6 Java 양식을 사용하고 있습니다. 그것은 간단한 Widget.java 모델과 WidgetData.java 클래스를 가지고 있습니다.이 클래스는 위젯 폼에 매핑되는 DTO를 처리하는 폼입니다.Java Play 양식 제출

이 예제는 작동하지만 컨트롤러에서 어떤 일이 일어나고 있는지 더 자세히 설명해야합니다. 문제의 컨트롤러 방법은 다음과 같습니다.

public class WidgetController extends Controller { 

    private final Form<WidgetData> form; 
    private final List<Widget> widgets; 

    @Inject 
    public WidgetController(FormFactory formFactory) { 
     this.form = formFactory.form(WidgetData.class); 
     this.widgets = com.google.common.collect.Lists.newArrayList(); 
    } 


    public Result createWidget() { 
     final Form<WidgetData> boundForm = form.bindFromRequest(); #1 

     WidgetData data = boundForm.get();       #2 
     widgets.add(new Widget(data.getName(), data.getPrice())); 

     return redirect(routes.WidgetController.listWidgets()); 
    } 
} 

나는 혼란스러운 선들의 번호를 매겼습니다.

# 1에서 어떤 현상이 발생합니까? 두 형식이 동일하기 때문에 form에서 boundForm으로 생성되는 것은 무엇입니까? 여기에 WidgetData 설정 메소드가 설정됩니다.

그래서 WidgetData 속성이 이미 설정된 경우 # 2에서 어떤 일이 발생합니까? 속성이 설정되었지만 위젯 모델을 만들려면 실제 WidgetData 객체가 필요합니까?

버전 2.0 - 2.6 용 예제 및 문서가 서로 모순되는 것은 어렵습니다.

답변

0

그래서 첫 번째 줄

final Form<WidgetData> boundForm = form.bindFromRequest(); 

요청에서 제출 된 모든 값을 취득하고, WidgetData 개체를 포함 할 양식에 매핑하려고 시도합니다. Form은이 프로세스에 필요한 래퍼 일뿐입니다. 데이터의 유효성도 검사합니다.

애플리케이션을 디버그하고 Form-Object를 살펴 본다면 제출 된 원본 데이터와 검증 오류가 포함 된 맵이 표시됩니다.

나서

WidgetData data = boundForm.get(); 

랩퍼 신청서에서 WidgetData 객체를 추출한다. 유효성 검사가 성공적으로 수행 된 경우에만 작동합니다.

희망이 조금 도움이되기를 바랍니다.