Java play框架中post请求中的表单值为空
我使用html发回表单,如下所示:Java play框架中post请求中的表单值为空,java,forms,jsp,playframework,playframework-2.0,Java,Forms,Jsp,Playframework,Playframework 2.0,我使用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">
@(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));
}
@(消息:字符串)
@主要(“联系人”){
有问题或需要帮助吗?请告诉我们,我们会尽快回复您
名字:
姓氏:
电子邮件:以下是我将如何做到这一点:
模板
@(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 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));
}
}
公共静态结果联系人(){
Form contactForm=Form(Contact.class).bindFromRequest();
if(contactForm.hasErrors()){
//过程
}否则{
//contactForm.get().firstName应填写正确的数据
返回ok(views.html.contact.render(“message”,contactForm));
}
}
对你有用吗?
您应该查看有关以下主题的Play2文档:
编辑
public class Contact {
public String firstName;
public String lastName;
public String email;
public String company;
// other stuff
}
如果你能解释为什么我以前的做法不起作用
我不确定这一点,但我可以看到您的代码中有一个问题,您不必在动态表单上调用data()
,直接使用DynamicForm.get()
就足够了,因此first=form.get(“firstName”)
就足够了
除此之外,你可以从
get(java.lang.String键)
如果提交成功,则获取具体值
如果没有错误,则DynamicForm
后面的内部映射将具有值,因此在实际从字段中获取具体值之前,您可以使用hasrerrors
进行检查
在我看来,使用表单(Contact.class).bindFromRequest()
样式将填充classContact
的实例更好更容易,这并不意味着可以使用Java注释验证字段。您必须向bindFromRequest()提供请求
方法。例如
DynamicForm form = form().bindFromRequest(request());
请求
功能为当前操作提供当前的请求
。
似乎bindFromRequest
不会自动绑定当前请求
我也遇到了同样的问题,谷歌把我带到这里,希望能有所帮助。可能不是完全相同的问题,但在我的Windows开发Play 2.6应用程序上,我也遇到了类似的问题。绑定不起作用。我的意思是表单的数据字段有正确的值,但模型的值是空的。这没有导致这样的元素异常:没有值存在。我我花了很长时间研究这个问题。解决这个问题的方法是清理项目,重新编译并再次运行它。Ehh。为什么不直接将参数String hello,String hello1,String hello2
传递到主页。联系方法,而不是使用bindFromRequest
检索它们?此外,您是否你是否在控制器和视图中正确地使用了firstName
?@Alex显然没有。我需要做什么特殊的和特定的事情吗?即使我尝试直接传递它们,它也没有正确地发送它们。我得到一个“参数不够”的答案错误。您能否显示真实的html/scala模板,而不是看起来像输入了name=hello
的文本。请显示真实的html/scala模板,以及主页的代码。请联系方法,包括定义。@alex使用实际代码编辑了它。如果您能解释为什么我以前的做法不起作用,您将获得额外的分数我会取消你被接受的身份,这样我以后才能给你赏金