假设我在 Web 应用程序中有一对表单,每个表单都显示在单独的 html 文件中:
form1.html
<form action="my_controller.java" method="POST">
First name:<br>
<input type="text" name="firstname" value="Mickey">
<br>
Last name:<br>
<input type="text" name="lastname" value="Mouse">
<br><br>
<input type="submit" value="Next">
</form>
form2.html
<form action="my_controller.java" method="POST">
Address:<br>
<input type="text" name="address" value="123 My Way">
<br>
Favorite Color:<br>
<input type="text" name="color" value="Green">
<br><br>
<input type="submit" value="Submit">
</form>
假设我还有一个 Java 对象:
public Person(String firstName, String lastName, String address, String favColor)
我的问题是我应该如何处理此表单的提交和控制?我接受以下选择:
- 在
form1
上创建一个Person
对象POST
并为其余字段写入空字符串的 do DB,然后更新form2 上的 DB
POST
- 构建
Person
对象客户端并使用AJAX
创建新页面的幻象 - 通过 Controller 使用
session
,并在用户浏览表单时传递此信息
看起来选项三是最好的解决方案,尽管我不太确定如何做到这一点。如果选项 3 是最佳实践,我该如何使用 play framework 来执行此操作
最佳答案
首先存储两个字段firstname
和lastname
在 Person
对象,您在 Controller 中从客户端接收到的对象。
Person person = new Person();
person.firstname = fname;
person.lastname = lname;
// Remaining two fields will be null in this point
填充 Play Form
与现有的 person 对象
Form<Person> personForm = Form.form(Person.class).fill(person);
通过将 personForm 作为参数传递来移动到 form2
return redirect(views.html.person_form2.render(personForm));
在您的 Form2
中制作firstname
和lastname
隐藏并填充 pesronForm
中的值其他两个字段将照常可见,其值保留为空。
@(personForm: Form[Person])
<!-- create hidden field for firstname and lastname like following -->
<input type="hidden" name="firstname" value='@personForm.field("firstname").value' >
提交后,您将在 Controller 中获得所有四个字段值。
Form<Person> personForm = Form.form(Person.class)
Person person = personForm.bindFromRequest().get();
关于java - 如何处理多个连续的表单和 Java 对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27353697/