Play Framework初学者。从表单中获取数据

时间:2017-02-12 11:08:25

标签: java playframework

我在表单中有多个选择。在调试模式下,interestIn的boundForm数据只有2(列表中第一项的id),但我想获取所有选中的项目

我的createuser.scala.html,格式为:

...
    <select class="form-control select2-multi" name="interestedIn" id="interestedIn" multiple="multiple">
    @for(interest <- interests){
        <option value="@interest.interestId">@interest.interestName</option>
    }
    </select>

@helper.inputText(userForm("user"), 'class -> "form-control"
...

当我调试此行

Http.MultipartFormData body = request().body().asMultipartFormData();

在数据中我可以看到interestIn []数组,其中包含多个select中的所有选定元素。

但是当我在模型上定义表单时,我只得到一个元素。可能这是因为我在列表上渲染视图&lt;&gt;而不是地图?如何保存我在地图中添加的值?

private static final Form<BusyUser> userForm = Form.form(BusyUser.class);

Form<BusyUser> boundForm = userForm.bindFromRequest();

List<Interest> interests= NeoDataProvider.getInterests(play.api.i18n.Lang.defaultLang().language());
BusyUser user = boundForm.get();
user.mail=user.user; //here I assign the mail of the user the value from the createUser form field
user.active=true;
//HERE I WANT TO GET THE DATA FROM THE MULTIPLE SELECT

BusyUser.class:

public long id;
@Id
@Constraints.Required(message = "*")
@Constraints.Email(message = "?")
public String user;
@Constraints.Required(message = "*")
@Column(unique=true)
public String visibleUsername;
//@Transient
public String password;

//@Constraints.Required(message = "*")
public String name;
//@Constraints.Required(message = "*")
@Constraints.Email(message = "?")
@Column(unique=true)
public String mail;

public Boolean active;
@Formats.DateTime(pattern = "yyyy-MM-dd HH:mm:ss")
public Date lastLogin;

public String authToken;
public String language;

public BusyUser(){}

当我想定义一个列表,我将从表格中保留所选项目

public List<String> interestedIn = new ArrayList<>();

我收到此错误消息:

'basic' attribute type should not be a container

如何在Java列表或数组中保留多个select中的所有选定项?

2 个答案:

答案 0 :(得分:1)

您可以简单地读取所有Multiselect数据,而不是名称=&#34; interestIn&#34;在你的表格中写名=&#34;感兴趣的[]&#34;在bean中或在模型String value=null; for(int i=0;i<intrestedIn.size();i++){ value=intrestedIn.get(i); System.out.println(value); } 中的java中 之后,您可以遍历列表并获取数据,如

{{1}}

答案 1 :(得分:0)

要获取多个选定对象,请使用以下代码:

 DynamicForm requestData = Form.form().bindFromRequest();
 DynamicForm.Dynamic s = requestData.get();
 Map<String, String[]> map = request().body().asFormUrlEncoded();
 String[] checkedVal = map.get("interestedIn");