2013-01-15 21 views
6

2 alanlı bir formum var - empno ve name. Her ikisi de varsayılan değerle doldurulur. Görüntülendiğinde, empno'un salt okunur olmasını ve name'un düzenlenebilir olmasını istiyorum.Salt okunur alan nasıl oluşturulur? Görünüm

Görünüm oluşturma sırasında, yalnızca hazır ve iyi çalışmak için @leaveform.value.get.empno kullanıyorum. Sorun, yalnızca ([NoSuchElementException: None.get]) numaralı hataya sahip ekleme sırasında ortaya çıkar.

Sorular:

  1. sorun değer özelliği yok dönüş hatadır. Değeri almak için başka ne kullanabilirim?
  2. Salt okunur alan için @inputText'u atlayabilir miyim?

benim kodunun altına bakınız:

// ***** CONTROLLER *****// 

val leaveform = Form[LeaveModel](
     mapping(
      "empno" -> nonEmptyText, 
      "name" -> nonEmptyText 
    )((no, empno) => LeaveModel(empno, name)) 
     ((leave: LeaveModel) => Some(leave.empno, leave.name)) 
) 

def create = withAuth { username => implicit request => 

    // Define default values 
    val empno = "STUDENT" 
    val name = "" 

    // Set default values 
    val filledForm = leaveform.fill(LeaveModel(empno,name)) 
    Ok(html.leave.form(filledForm)) 
} 

def insert = Action (
    implicit request => { 
     leaveform.bindFromRequest.fold(
      error => { 
       BadRequest(html.leave.form(error)) // Question 1. Here is the error. 
      }, 
      leave => { 
       LeaveModel.insert(leave) 
       Redirect(routes.indexController.index()) 
      } 
     ) 
     } 
) 

// ***** VIEW START***** // 
@(leaveform: Form[LeaveModel]) 
@leaveform.value.get.empno 
@helper.form(
    action = (routes.LeaveController.update(oid)), 
     'id -> "leaveform") { 
      @inputText(leaveform("empno")) // Question 2. 
      @inputText(leaveform("name")) 
     } 

cevap

15

formu yardımcıları kullanmak zorunlu değildir. Bunları kullanırsanız, readonly özniteliğini geçirebilir veya yalnızca okunmasını sağlamak için alanı CSS ile stilleyebilirsiniz.

  • CSS tarafından devre dışı

    Heyecan önyükleme:

    @inputText(
        editForm("createdOn"), 
        'id -> "createdOn", 
        'class -> "input-xlarge disabled", 
        '_label -> Messages("createdOn"), 
        '_help -> "" 
    ) 
    
  • Geçiş isteğe bağlı özellik: readonly

    @inputText(
        editForm("createdOn"), 
        'id -> "createdOn", 
        'class -> "input-xlarge", 
        '_label -> Messages("createdOn"), 
        'readonly -> "readonly", 
        '_help -> " This is read only" 
    ) 
    
  • Ayrıca alanını yeniden, ama onun değerini göstermez edebilirsiniz:

  • Güncelleme 2018-01-24

Çal alanında artık Optional, see the docs dönüyor. Bu gibi alandan değer almak anlamına gelir:

  • @form("fieldName").getValue.get (atabilir bir NPE)
  • @form("fieldName").getValue.getOrElse("defaultValue")
+0

Ben scala 2.0.3 ve th kullanıyorum ere alan yöntemi değildir. Benim kodum -> 'leaveform.field ("status"). Value' ve return error 'değer alanı play.api.data.Form [models.LeaveModel]' üyesi değil. –

+0

hmm .. java kullanıyorum, ancak dokümanlar diyor ki: @ elements.field kullanarak orijinal alana da erişebilirsiniz: http://www.playframework.org/documentation/2.0/ScalaFormHelpers. – adis

+0

@SimonSiah '@leaveform ("status")' ı kullanmayı deneyin. 'Yerine' çalışması gereken Scala Formları ile deneyimim yok. – biesior

0

kullanıcıya bir form dönen Flaş bağlamını kullanmayı deneyin:

def create = withAuth { username => implicit request => 
     // leaveForm initialization as before 

     // use form data from flash if present 
     val form = if (flash.get("error").isDefined) 
      leaveForm.bind(flash.data) 
     else 
      leaveForm 
     Ok(stakeholders.register(form)) 
} 

def insert = Action { implicit request => 
     leaveForm.bindFromRequest.fold(
       hasErrors = { form => 
        Redirect(routes.Leaves.create). // put correct route here 
         flashing(Flash(form.data) + 
          ("error" -> Messages("validation.errors"))) // customize error message 
       }, 
       leave => { 
        LeaveModel.insert(leave) 
        Redirect(routes.indexController.index()) 
      } 
     ) 
    } 

HTH Erich

+0

Bu kod, form oluşturma ve dönüş hatası sırasında iyi çalışır. @ leaveform.forField ("name") (value => value.value.get). Tüm yardımcılar için teşekkürler. –

İlgili konular