我对 Play Framework 比较陌生,所以我希望这是可以理解的。
如何告诉 play 将表单元素映射到 Form 类中的 Object 字段?
我有一个表单,其中包含从我的 ORM 中选择的对象名称下拉列表。下拉项的值是 ORM 对象的 ID 字段。
Java端的表单对象有一个带有ORM对象类型的字段,以及一个获取字符串并将其转换为对象的setter,但是在表单提交时我只收到一个表单错误“无效值”,表明翻译不是发生。
我的模板有一个表单组件:
@helper.select(
createAccountForm("industry"),
helper.options(industries)
)
Whereindustries
在模板构造函数中由 : 定义,industries: Map[String, String]
由 ID 字符串到用户可读名称组成。
我的控制器定义了类:
public static class CreateAccountForm {
public String name;
public Industry industry;
public void setIndustry(String industryId) {
this.industry = Industry.getIndustry(Integer.parseInt(industryId));
}
}
编辑:我在课堂上做二传手,因为这个答案表明这样做,但这不起作用。
EDIT2:结果证明setter方法完全不是解决这个问题的方法。在尝试让注释正常工作后,我注意到了 Formatters.SimpleFormatter 并尝试了它。它起作用了,尽管我不明白为什么它周围的额外块是必要的。
全球.java:
public class Global extends GlobalSettings {
// Yes, this block is necessary; no, I don't know why.
{
Formatters.register(Industry.class, new Formatters.SimpleFormatter<Industry>() {
@Override
public Industry parse(String industryId, Locale locale) throws ParseException {
return Industry.getIndustry(Integer.parseInt(industryId));
}
@Override
public String print(Industry industry, Locale locale) {
return industry.name;
}
});
}
}