用逗号拆分字符串,然后在 Play 中存储在数组 val 中! + 斯卡拉

Split string by commas then Store in array val in Play! + Scala

我正在传递一个列表

errors.add(new ValidationError("Employee " + strId, "error.range," + strName +","+ intRange));

这将构建一个字符串

"Employee1","error.format,FIRST NAME,20

我想用“,”拆分消息字符串,并将其存储在 Scala 模板或视图中旋转的数组变量中。我不太擅长 scala 代码,我不知道如何在 scala 模板中存储变量,也不知道拆分字符串的语法。是否有可以在 Scala 模板中完成此任务的代码?谢谢。

<div id = "msg-menu" class = "msg-menu">
    @for((key, value) <- appModel.errors) {
        <div class="error-msg">
          <p>@key :
             @for(err <- value) {
                @for(error <- err.message.split(",")) {
                    @Messages(error)
                }
             }
          </p>
        </div>
    }
</div>

我所做的是使用 for 循环来完成它,但这不是我需要的。我需要在数组中声明所有字符串并将它们用作 @Messages 上的参数。喜欢:

@Messages(error[0],error[1],error[2])

其中 error0 = "error.range"、error1 = "FIRST NAME" 和 error2 = "20"。在 conf/message 中,我将使用参数

构建一条错误消息
error.range = Enter {0} in {1} characters or less.

变量在 twirl 中使用 @defining 定义,方式如下:

@defining( err.message.split(",").lift ) { errors =>
  ...
}

lift 的使用可能很方便,因为它有助于解决索引越界的情况,在这种情况下您可能不知道数组/集合中元素的确切数量。 errors(2) 将 return Some("20") 在您的示例中,如果没有值,则 None

用上面的代码替换最里面的 for 循环并硬编码为恰好 3 个参数,然后您可能会得到类似

的东西
  @defining( errors(0).getOrElse("") ) { messageId =>
    @Message(messageId,errors(1).getOrElse(""),errors(2).getOrElse(""))
  }