我想编写一个函数来格式化Vaadin消息。 这些消息的格式
108|0ff1255e-e2be-4e7b-ac5c-1ff2709ce886[["0_11_12_13_login_username","v","v",["text",["s","Agent00232"]]]]
第一个数字是则长度有某种后跟净荷会话ID(以后称为vaadin_security_key)的。 (在这个例子中我设置了值“Agent00232”与连接器ID“0_11_12_13_login_username”文本字段)我写了一个函数是这样的:
def sendMessage(name: String, vaadinCommand: String) = {
def createMessage(session: Session) = {
val message = session("vaadin_security_key").as[String] + "\u001d" + vaadinCommand
val message2 = ELCompiler.compile(message)(classTag[String])(session).toString
val message3 = message2.substring(8, message2.length - 2)
val len = message3.length
val completeMessage = len.toString() + "|" + message3
completeMessage
}
exec(
ws(name)
.sendText(createMessage)
.check(wsAwait
.within(Vaadin.defaultTimeout)
.until(1)
.regex("""(.+)""")
.saveAs("lastResult")))
.exec { session =>
println(session("lastResult").as[String])
session
}
}
我想在字符串中使用此方法,这样和使用EL表达式:
exec(Vaadin.sendMessage("setting Name", "[[\"0_11_12_13_login_username\",\"v\",\"v\",[\"text\",[\"s\",\"${username}\"]]]]"))
因此,我有长度计算之前评估字符串。 该方法ELCompiler.compile()...返回一个表达式[字符串]。 问题是,我需要这个字符串,并用计算出的长度Concat的它。 当我做message2.toString它返回Success(0ff1255e-e2be-4e7b-ac5c-1ff2709ce886[["0_11_12_13_login_username","v","v",["text",["s","Agent00232"]]]])
并且为此我必须使用子串(8,message2.length - 2),以获得评估有效载荷(具有安全密钥)来计算的它的长度。
有没有更好的(更优雅)的方式提取出来的字符串表达式,则使用的substring(...)