【发布时间】:2019-12-13 00:31:12
【问题描述】:
我想使用 Java 中的 Play framework 2.7 创建一个表单应用程序,我想创建表单的所有字段一定次数,在创建之前我不知道它。
这是我的模型之一:
public class Information {
public String clientType;
public String companyName;
public String name;
public String firstName;
public String addressNumber;
public String apartmentType;
public Information(String companyName, String name, String firstName, String addressNumber, String clientType,
String apartmentType) {
this.clientType = clientType;
this.companyName = companyName;
this.name = name;
this.firstName = firstName;
this.addressNumber = addressNumber;
this.apartmentType = apartmentType;
}
}
这里是我的表单数据之一:
public class InformationData {
@Constraints.Required
private String clientType;
@Constraints.Required
private String companyName;
@Constraints.Required
private String name;
@Constraints.Required
private String firstName;
@Constraints.Required
private String addressNumber;
@Constraints.Required
private String apartmentType;
public InformationData() {
}
// getters and setters
}
在这里,我的一部分观点:
@(informationForm: play.data.Form[data.InformationData])
<h1>Informations</h1>
@helper.form(routes.InformationController.validationInformations) {
@helper.CSRF.formField
@helper.inputText(
informationForm("fieldName"),
Symbol("_help") -> "",
Symbol("_error") -> informationForm("fieldName").
error.map(_.withMessage("ERROR"))
)
<button type="submit">Submit</button>
}
在我的控制器中我有这个属性
private final Form<InformationData> form; 将用作我的视图的参数(Twirl 模板)。
我尝试将此属性转换为java.util.List,在我看来,在此列表上使用@for 循环(在我看来,它变成了 Scala Seq),但表单的验证不正确:它考虑了每个(例如)name 字段作为同一个字段,因此在验证期间它只会用第一个字段的值填充每个 name 字段的值(即使第一个字段为空而另一个不是) .
编辑
我尝试使用循环的当前索引来修改我所有字段的名称(即:name0 然后name1 等等),它停止与我的字段混淆,因为它们没有相同的名称,但我的InformationData 无法验证,因为它无法识别我的字段名称。
是否有可能通过使用 HashMap 或其他东西来理解 name0 和 name1 应该被视为(不同的)name?
【问题讨论】:
标签: java playframework twirl