2012-04-18 3 views
18

Play 2.0에서 양식 유효성 검사 및 양식 도우미와 계속해서 고심하고 있습니다. 트위터 부트 스트랩과 함께 사용하는 로그인 화면이 있습니다. 그래서 내 로그인 폼은 다음과 같습니다양식 유효성 검사 및 양식 도우미

Login screen

하는 것은 이해가 안 무엇 :

@(elements: helper.FieldElements) 

@************************************************** 
* Generate input according twitter bootsrap rules * 
**************************************************@ 
<div class="control-group @if(elements.hasErrors) {error}"> 
    <label class="control-label" for="@elements.id">@elements.label</label> 
    <div class="controls"> 
     @elements.input 
     <span class="help-inline">@elements.infos.mkString(", ")</span> 
    </div> 
</div>  

이 출력입니다 :

@helper.form(routes.Application.authenticate, 'class -> "form-horizontal") { 
    <fieldset> 
    <legend>@Messages("login")</legend> 

      @if(loginForm.hasGlobalErrors) { 
       <div class="alert alert-error"> 
       <a class="close" data-dismiss="alert">×</a> 
        @loginForm.globalError.message 
       </div> 
      } 
      @if(flash.contains("success")) { 
       <div class="alert alert-success"> 
       <a class="close" data-dismiss="alert">×</a> 
        @flash.get("success") 
       </div> 
      } 

      @inputText(loginForm("email"), '_label -> "Email") 
      @inputText(loginForm("password"), '_label -> Messages("login.password")) 


      <div class="form-actions"> 
       <button type="submit" class="btn btn-success">@Messages("button.doLogin")</button> 
       @Messages("or") 
       <a class="btn btn-warning" href="routes.LandingPage.index">@Messages("button.doCancel")</a> 
      </div>    
    </fieldset> 
    } 

그리고 내 트위터 부트 스트랩 필드는 다음과 같습니다 :

1, W 숨바꼭질은 (입력 필드의 오른쪽에) 눈에 보이는 도움말 텍스트 모든 테 시간

도움말 텍스트가 @elements.infos.mkString(", ")에서 오는 것입니다. 이 줄을 삭제하면 도움말 텍스트가 삭제됩니다. 또는 빈 문자열을 전달하여 helptext를 보이지 않게 할 수 있습니다. '_help -> ""

2, 오류가 발생하면 도움말 텍스트 만 표시하는 방법? 이 코드를 사용하는 경우

도움말 텍스트를 추가 할 수 @elements.errors(elements.lang).mkString(", ")

3 입력 텍스트 필드에 전달 가능한 파라미터는 무엇인가? class="@elements.args.get('_class) 다음 나는 이런 식으로 전달할 수 있습니다 :

내 사용자 정의 인수를 정의 할 수 있습니다

(즉, 클래스 또는 자리)를 통과 ... 나뿐만 아니라 클래스 이름을 전달하고 싶지만 방법을 모르겠어요 '_class -> "classname"

4 하나의 템플릿 부분에 하나 이상의 implicitFieldConstructors을 정의 할 수 있습니까? 확인란 때문에 나는 다른 fieldConstructor를 입력 상자 및 텍스트 영역과 비교하지만이를 수행하는 방법은 무엇입니까? 이것에 대한

예는 다음과 같이 컴퓨터 데이터베이스 샘플에서 트위터 부트 스트랩 필드가 정의되어 있지만, 다음이 사용됩니다

@inputText(loginForm("email"), '_label -> "Email") 

왜 여기에 이름 InputText]를하지 그냥 입력? input.scala.html도 있기 때문에?

그래서 확인란에 대한 필드 처리기를 만들고 싶다면 어떻게 사용합니까? 다음 형식은 나에게 오류를주고있다 :

not enough arguments for method apply: (implicit handler: views.html.helper.FieldConstructor, implicit lang: play.api.i18n.Lang)play.api.templates.Html in object checkbox. Unspecified value parameter lang. 

내가 여기 개념 ... 감사를 잃었 생각 :

@checkBoxHandler = @{ FieldConstructor(s2ftheme.constructors.checkbox.render) } 
@checkbox(loginForm("remember"), '_label -> Messages("login.remeberme"))(handler = implicitFieldConstructor) 

나는 오류 메시지가 표시됩니다.

답변

10

정보 텍스트의 범위는 @elements.infos.mkString(", ")입니다. 오류를 표시하려면 대신 @elements.errors(elements.lang).mkString(", ")을 사용해야합니다.

infos 콘텐츠를 변경하기위한 올바른 매개 변수는 입니다. (약간 일치하지 않습니다.이를 실현하려면 소스를 읽어야합니다.) 그래서 내장 된 부트 스트랩 필드를 사용하고 infos를 억제하려면 , '_help -> ""을 전달합니다. # 4

편집는 :

다음은 특정 확인란을 호출해야하는 방법은 다음과 같습니다

@checkbox(loginForm("remember"), '_label -> Messages("login.remeberme"))(handler = implicitFieldConstructor, implicitly[Lang])

그리고 네, @inputinput.scala.html라는 템플릿이 있다는 뜻. 모든 입력 헬퍼에 대한 기본 템플릿입니다.

왜 어떻게 작동하는지 이해하려면 Play 2.0 및 스칼라 (특히 암시 적 인수)를 조금 더 깊이 들어가야합니다.

+0

좋아, 내가 다른 마크 업을 원하는 체크 박스 때문에 체크 박스를 말하기 위해 다른 암시 적 FieldConstructor를 제공 할 수 있습니까? – adis

+0

번역 키는 어떻게 구성되어 있습니까? "이 필드는 필수"라는 텍스트를 번역하고 싶습니까? – adis

+0

필드 생성자를'@ checkbox'에 전달할 수 있습니다. –

1
  1. 이 줄로 인해 <span class="help-inline">@elements.infos.mkString(", ")</span>입니다. 필드에 대한 정보를 표시하고 있습니다. 정보를 표시하지 않으려면 제거하십시오.
  2. 이 코드를 추가

    @if(elements.hasErrors) { 
        <span class="help-inline">@elements.infos.mkString(", ")</span> 
    } 
    
  3. 는 클래스 이름을 설정하려면 : class="@elements.args.get('_class) : 트위터 부트 스트랩 필드에이를 추가합니다. , @inputText(loginForm("email"), '_label -> "Email", '_class -> "classname")

이 개념을 이해하기 위해 소스 코드를 살펴 걸릴 : 그리고 당신의 로그인 폼에서 다음과 같이 클래스 매개 변수를 추가 나는 오류를 표시하기 위해 동일한 전투에있어 https://github.com/playframework/Play20/blob/master/framework/src/play/src/main/scala/views/helper/defaultFieldConstructor.scala.html

0

을 :) 지금 내가 사용하고 있습니다 : http://twitter.github.com/bootstrap/components.html#labels-badges

:

은 오류가없는 경우 숨겨져있을 것
<span class="errors badge badge-important">@elements.errors.mkString(", ")</span> 

이에 대해 살펴

하지만 여전히 "필수"를 포르투갈어로 번역하는 방법을 찾고 있습니다.