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

时间:2017-10-10 01:14:00

标签: html scala playframework split playframework-2.0

我正在传递一份清单

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.

1 个答案:

答案 0 :(得分:1)

使用@defining以变换方式确定变量,方法如下:

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

使用lift可能很方便,因为它有助于索引越界条件,您可能不知道数组/集合中元素的确切数量。错误(2)将在您的示例中返回Some("20"),如果没有值,则返回None

用上面的代码替换你最内层的for循环并硬编码到3个参数,你可能会有类似的东西

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