2010-08-03 17 views
2

有一個在電梯框架一個簡單的形式,並與渲染方法處理表單的類:爲什麼提起觸發器的方法?

def render(xhtml:NodeSeq) = { 
     var name = "" 
     var role = "" 
     var human = "" 
     def register = { 
      val person = new Person 
      person.name = name 
      person.role = role 
      person.human = if (human == "yes") "true" else "false" 
      model.create(person) 
      S.redirectTo("/index") 
     } 
     bind("user", 
     xhtml, 
     ("name" -> SHtml.text(name, name = _)), 
     ("role" -> SHtml.text(role, role = _)), 
     ("human" -> SHtml.text(human,human = _)), 
     ("submit" -> SHtml.submit("Register",register))) 
    } 

當我運行這個例子,例如。我訪問它綁定到根據形式的URL,我得到以下錯誤:

Message: java.lang.ClassCastException: java.lang.String cannot be cast to java.lang.Number 
... 
... 
... 
    epsilon.sjbs.CrudModel$class.create(Sjbs.scala:14) 
    epsilon.sjbs.PersonModel.create(Sjbs.scala:7) 
    epsilon.snippet.PersonSnippet.register$1(Snippet.scala:33) 
    epsilon.snippet.PersonSnippet.render(Snippet.scala:41) 

這看起來像寄存器方法甚至跑有上提交沒有點擊,只需訪問該網址。爲什麼?
編輯:這是我原來的實體

@NamedQuery(name = "findAll", query = "select x from Person x") 
@Entity class Person extends Id with Name{ 
    @OneToMany(mappedBy="person", cascade=Array(CascadeType.REMOVE)) 
    var participated:java.util.List[Participant] = new java.util.ArrayListParticipant 
    var role:String = Role.User 
    var human:String = _ 
} 

回答

3

我認爲Person.humanBoolean,不是String ...

它看起來像你使用的東西,看起來像映射。如果您使用映射,我會做它像這樣:

def render(xhtml:NodeSeq) = { 
    val person = Person.create 
    bind(
    "user", 
    xhtml, 
    "name" -> SHtml.text(person.name, person.name(_)), 
    "role" -> SHtml.text(person.role, person.role(_)), 
    "human" -> SHtml.text(
     if (person.human) ? "yes" else "no", 
     (human) => person.human(if (human == "yes") true else false) 
    ), 
    "submit" -> SHtml.submit("Register",() => { 
     person.save 
     S.redirectTo("/index") 
    }) 
) 
} 

就當然個人喜好,但你不能使用一個明確的vars這種方式,可以方便地重用它來編輯現有Person ..

1

由於pr1001寫道person.human很可能是布爾值。

寄存器不被調用,但是person.human已經被評估,因爲人類字符串被設置爲註冊方法。你只有改變分配:

person.human = if (human == "yes") true else false 
+0

但是,嚴重的是,我已經用CastException解決了這個問題,現在訪問頁面並立即重定向到「/ index」 – coubeatczech 2010-08-03 18:14:32

相關問題