我正在尝试在我的控制器中获取一个选定的值但无法使其工作。
在我看来,我有一个表格:
@(infoObjectForm: Form[Infoobject],nav: String = "")
@form(routes.Admin.admin_createMapInstance()) {
<fieldset>
@select(
infoObjectForm("infoobjectId"),
options(Infoobject.all_values),
'id -> "infoobjects_field",
'_label -> "Infoobject", '_default -> "--Select Infoobject--",
'_showConstraints -> false, 'value -> infoObjectForm
)
</fieldset>
<div class="actions">
<input type="submit" value="Create this Map Instance" class="btn primary"> or
<a href="@routes.Admin.admin_MapInstance()" class="btn">Cancel</a>
</div>
}
此下拉列表显示我的所有信息对象。当我选择一个并点击提交按钮时,我想在控制器中使用所选的InfoObject(及其属性)。
Form<Infoobject> mapForm = form(Infoobject.class).bindFromRequest();
if(mapForm.hasErrors()) {
flash("error", "MapForm contains an error");
return badRequest(createMapForm.render(mapForm, ""));
}
Infoobject infoobject = mapForm.get();
String desig = infoobject.getDesignation();
String desc = infoobject.getDescription();
...
mapForm有错误。你们知道为什么吗?
Infoobject模型:
@Entity
public class Infoobject extends Model {
@Id
@SequenceGenerator(name="infoobject_seq", sequenceName="infoobject_id_seq", allocationSize=1000)
@GeneratedValue(strategy=GenerationType.SEQUENCE, generator="infoobject_seq")
public Long infoobjectId;
@Required
public String designation;
@Required
public String description;
...getters/setters
我尝试在视图中使用两个@inputText字段,因此我可以创建一个有效的信息对象。但现在我不想创建现有信息对象的地图实例。
感谢您的帮助!
编辑:在控制台中打印错误,说“error.required”。任何人?似乎表单不包含任何Infoobject。发现this类似的问题/答案。为什么这不起作用?
答案 0 :(得分:0)
这个解决方案有效,但我不认为这是最好的方法。
<form>
@select(
infoObjectForm("infoobjectId.id"),
options(Infoobject.all_values),
'id -> "infoobjects_field",
'_label -> "Infoobject", '_default -> "--Select Infoobject--",
'_showConstraints -> false
)
<div class="actions">
<input type="button" value="Create this Map Instance" class="btn primary" onclick="JavaScript:createMap()"> or
<a href="@routes.Admin.admin_MapInstance()" class="btn">Cancel</a>
</div>
</form>
<script>
function createMap() {
var ioId = document.getElementById('infoobjects_field').value;
if(ioId) {
var nextUrl = "/CreateMapInstance?ioId="+ioId;
window.location = nextUrl;
}
}
</script>
我会做一个GET并只在网址中发送ID而不是在POST中发送整个Info对象。
答案 1 :(得分:0)
在@select标签中输入infoObjectForm(“infoobjectId”)
在模型类Infoobject中添加:
static {
play.data.format.Formatters.register(Infoobject.class, new ClassFormatter());
}
public static class ClassFormatter extends SimpleFormatter<Infoobject> {
@Override
public Infoobject parse(String text, Locale locale) {
if (text == null || text.trim().length() == 0)
return null;
return Infoobject.find.byId(Long.parseLong(text.trim()));
}
@Override
public String print(Infoobject value, Locale locale) {
return (value == null || value.id == null ? "" : value.id.toString());
}
}