我有嵌套值的複雜的對象,它看起來像這樣:如何在Play框架表單中將輸入文本映射到序列中?
case class Gateway(RouteConfig: RouteConfig, gwType: Boolean, smmpp: Option[ConfigSMPP], modem: Option[ConfigModem])
每個對象都有無論是在smmpp或在調制解調器部件值。然後在我的嵌套對象中有一個列表成員。我基於Play文檔逐步編寫了表單映射。
val gatewayForm: Form[SmsGateway] = Form(
mapping(
"smsRouteConfig" -> mapping(
"oracleId" -> optional(longNumber),
"smsType" -> optional(seq(text)),
)(RouteConfig.apply)(RouteConfig.unapply),
"gwType" -> boolean,
"smmpp" -> optional(mapping(
"nodeId" -> optional(text),
"systemType" -> optional(text),
)(ConfigSMPP.apply)(ConfigSMPP.unapply)),
"modem" -> optional(mapping(
"nodeId" -> optional(text),
"mdType" -> optional(text),
)(ConfigModem.apply)(ConfigModem.unapply))
)(SmsGateway.apply)(SmsGateway.unapply)
)
但現在我有一些問題:
1)調制解調器或SMPP形式必須顯示,如果他們具有值或取決於gwType布爾值(0-SMPP,1-調制解調器)。我不知道該怎麼做。
2)嵌套序列必須以單個字符串格式顯示,而不是重複輸入框。例如,如果我在sq中有3個值的smsType - 我應該看到一個文本框,其中有3個值用空格或逗號分隔,並且在從文本框中提交值後,他們必須再次轉換爲seq。 我希望有人能告訴我如何去做或幫助我理解我應該做什麼,如果我的願望是不真實的。對不起,我的英語不好。
如果我明白我們只是覆蓋我的實體的apply和unapply函數。我可以在我的伴侶對象中爲清晰的代碼做到這一點,或者我只能在映射中進行這種轉換嗎? – mechanikos 2014-12-03 10:42:15
'映射'方法有兩個函數作爲參數,所以只要您正確傳遞它們,您就可以在任何地方定義它們。這只是一個簡單的例子。如果我是你,我不會在實體伴侶中重寫'apply'和'unapply',而是讓這些方法更貼近表單,因爲它們的功能與表單強烈相關,而不與實體本身相關。 – 2014-12-03 10:51:23
你可以添加一些例子如何將這種轉換提取到apply \ unaply方法的其他地方,因爲我的大腦不能理解這是如何做到這一點? – mechanikos 2014-12-03 12:35:17