我有html回发表格,像这样:
@(message: String) @main("Contact") { <link rel="stylesheet" media="screen" href="@routes.Assets.at("stylesheets/contact.css")"> <div id="pageContainer"> <div id="form"> <div id="topText"> <p>Have a question or need some assistance? Let us know and we'll get back to you ASAP.</p> </div> <br/> <form method="POST" action="@routes.Home.contact()"> <div id="contactInfo"> <label class="contactLabel">First Name:</label><input type="text" name="firstName" id="firstName" class="contactInput" /> <br /> <label class="contactLabel">Last Name:</label><input type="text" name="lastName" id="lastName" class="contactInput" /> <br /> <label class="contactLabel">Email:</label><input type="text" name="email" id="email" firstName" class="contactInput" /> <br /> <label class="contactLabel">Company:</label><input type="text" id="company" name="company" class="contactInput" /> <br /> <input type="hidden" id="hidden" name = "hidden"></input> <p id="crap">@message</p> </div> <br/> <div id="message"> <label class="contactLabel">Message:</label><textarea cols="50" rows="10"></textarea> </div> <input type="submit" name="submit" id="submit" value="Submit"></input> </form> </div> </div> }
回到控制器中,它看起来像这样:
public static Result contact() { //Map<String,String[]> values = request().body(); DynamicForm form = form().bindFromRequest(); String first = ""; if(form.data().get("firstName") != null) first = form.data().get("firstName").toString(); return ok(views.html.contact.render(first)); }
但是,当我查看的结果时form().bindFromRequest(),它总是空的。我想念什么吗?
form().bindFromRequest()
这是我的处理方式:
模板
@(message: String, contactForm: Form[Contact]) @import helper._ @main("Contact") { <link rel="stylesheet" media="screen" href="@routes.Assets.at("stylesheets/contact.css")"> <div id="pageContainer"> <div id="form"> <div id="topText"> <p>Have a question or need some assistance? Let us know and we'll get back to you ASAP.</p> </div> <br/> @form(routes.Home.contact()) { <div id="contactInfo"> <label class="contactLabel">First Name:</label> @inputText(contactForm("firstName"), 'class -> "contactInput"') <br /> <label class="contactLabel">Last Name:</label> @inputText(contactForm("lastName"), 'class -> "contactInput"') <br /> <label class="contactLabel">Email:</label> @inputText(contactForm("email"), 'class -> "contactInput"') <br /> <label class="contactLabel">Company:</label> @inputText(contactForm("company"), 'class -> "contactInput"') <br /> <input type="hidden" id="hidden" name="hidden"></input> <p id="crap">@message</p> </div> <br/> <div id="message"> <label class="contactLabel">Message:</label><textarea cols="50" rows="10"></textarea> </div> <input type="submit" value="Submit" /> } </div> </div> }
班级联系方式
public class Contact { public String firstName; public String lastName; public String email; public String company; // other stuff }
控制者
public static Result contact() { Form<Contact> contactForm = form(Contact.class).bindFromRequest(); if (contactForm.hasErrors()) { // process } else { // contactForm.get().firstName should be filled with the correct data return ok(views.html.contact.render("message", contactForm)); } }
对你起作用吗 ?您应该查看有关这些主题的Play2文档:
编辑
如果你能解释一下为什么我是这样做的方式以前 没有 工作
我不确定,但是我可以在您的代码中看到一个问题,您不必调用data()动态表单,直接使用DynamicForm.get()就足够了,因此first = form.get("firstName")就足够了。
data()
DynamicForm.get()
first = form.get("firstName")
此外,如您从DynamicForm Javadoc中看到的
get(java.lang.String键) 如果提交成功,则 获取具体价值。
get(java.lang.String键)
如果提交成功,则 获取具体价值。
DynamicForm如果没有错误,后面的内部映射将具有值,因此您可以hasErrors在实际从字段中获取具体值之前进行检查。
DynamicForm
hasErrors
从我的角度来看,使用form(Contact.class).bindFromRequest()填充类实例的样式会更好,更轻松Contact,而不必说可以使用Java批注来验证字段。
form(Contact.class).bindFromRequest()
Contact