2014-07-23 4 views
1

표준 'crud'목록 '페이지에 필터 양식을 추가하려고합니다. 기본 필터 선택과 양식을 제공합니까 혼자play.data.Form - 기본 양식 값을 채우는 가장 좋은 방법

// set filter defaults 
ImageFilter defaultFilter = new ImageFilter(); 
defaultFilter.setYear(currentYear); 
defaultFilter.setColor(user.getFavouriteColor()); 

// get filter for view 
Form<ImageFilter> form = Form.form(ImageFilter.class).fill(defaultFilter).bindFromRequest(); 
ImageFilter filter = form.get() 
  • bindFromRequest는() 만 사용자가 지정한 필터 형태를 얻을 수 있지만, 첫 번째로드의 필드에는 선택한 값
  • 채우기 (defaultFilter)가 없다
  • 이 방식으로 연결된 동작은 마지막으로 호출 한 동작과 동일합니다.

기본값을 설정하는 적절한 방법은 무엇입니까?

이상적으로는 인덱스 페이지 :

  • 년 = 2010 & 색으로 요청하는 경우 매개 변수를
  • 제공되지 기본 필터의 선택은 = 그 필터가 양식에 표시 파란색
  • 경우 ? year = 2010로 요청하면 양식에 2010과 사용자가 가장 좋아하는 색이 표시됩니다.
+0

실제 사용 사례에는 10 가지 정도의 가능한 필터가 있으며 이는 애플리케이션의 여러 모델 중 첫 번째 것입니다. 정말로 한 줄의 솔루션이 있기를 바랬습니다. (방금 Python/Django 프로젝트에서 나온 Java/Play는 다소 장황하다.) – davur

답변

0

기본값이 있는지 확인한 후 흐름을 확인하십시오. 존재하지 않는 경우 필터에 설정을 추가하거나 쿼리 문자열 매개 변수를 사용하여 UI에서 렌더링하십시오.

0

코드를 두 가지 동작으로 분할하면 원하는 것을 얻을 수 있습니다.

처음에는 양식을 기본 필터로 채우고 사용자에게 표시합니다.

public static Result show() { 
    ImageFilter defaultFilter = new ImageFilter(); 
    defaultFilter.setYear(currentYear); 
    defaultFilter.setColor(user.getFavouriteColor()); 
    Form<ImageFilter> form = Form.form(ImageFilter.class).fill(defaultFilter); 

    return ok(index.render(form)); 
} 

두 번째 작업에서는 단순히 요청의 양식 값을 바인딩합니다. 사용자가 일부 값을 변경하면 기본값으로 설정된 변경되지 않은 값과 함께 양식이 채워집니다.

당신이보기를 표시하지 않고 사용자 입력 후 기본값으로없는 필드를 채우려는 경우

public static Result handle() { 
    Form<ImageFilter> form = Form.form(ImageFilter.class).bindFromRequest(); 
    ImageFilter filter = form.get(); 
    return ok("TODO handle form"); 
} 

편집하기 전에 당신이 바인딩 후 수동으로해야 될 것 같아요 제출합니다.

+0

나는 놀고 비슷한 접근법을 사용했다. – davur

+0

이것은 (sorta) 작동하지만, 또는 - 또는 -입니다. 그냥 querystring (if (request(). queryString(). size() == 0) .fill (...) else .bindFromRequest() .. 내 질문의 끝 부분에서 내 '이상적'의 포인트 3을 지원하지 않습니다 – davur

+0

사용자 요청 전에 기본값을 채우지 못하면 플레이 폼 API가 도움이되지 않습니다. 할 수있는 것은 어떤 필드가 채워지지 않았는지 확인하고 setter를 사용하여 기본값을 설정하는 것입니다. –