Play框架2.3.2:如何在scala模板中呈现List或Map

时间:2014-09-02 10:14:48

标签: scala playframework-2.0

我试图在我的视图中显示一个字符串列表作为可重复的输入文本控件。这是我的模特:

public class User {
    @Required
    public String email;
    public String password;
    public List<String> products;
}

控制器:

    public static Result index() {
    Form<User> userForm = Form.form(User.class);

    Map<String,String> anyData = new HashMap<String,String>();
    List<String> listProduct = new ArrayList<String>();
    listProduct.add("p1");
    listProduct.add("p2");
    userForm = userForm.fill(new User("bob@gmail.com", "secret", listProduct));
    return ok(views.html.index.render(userForm));
}

查看:

@(userForm: Form[models.User])
@import helper._
@import models.User
@import scala._

@main("Welcome to Play") {

<form id="formUser" action="/user/apply" method="post">
    @inputText(userForm("email"))
    @inputText(userForm("password"))
    @for(product <- userForm("products")) {
      <input type="text" name="@product" value="@product">
    }

    <input type="submit" value="submit"/>
</form>
}

错误是:

value map is not a member of play.data.Form.Field

我也试过表单助手@repeat。但它只是不起作用。

    @repeat(userForm("products"), min = 0) { 
        product => @inputText(product)
    }

错误:

not found: value product

我在Java中使用Play 2.3.2。 有什么想法会出错吗?

苏拉杰

1 个答案:

答案 0 :(得分:1)

您只需记住视图模板已解析为Scala函数,并且代码将使用 @ 字符进行转义。您的第二个解决方案正常。在这种情况下,您只需要以正确的方式格式化代码,它就像一个魅力。

@repeat(userForm("products"), min = 0) { product => 
  @inputText(product)
}