【问题标题】:How to handle multiple successive forms and Java objects如何处理多个连续的表单和 Java 对象
【发布时间】:2015-02-05 20:31:03
【问题描述】:

假设我在一个 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)

我的问题是我应该如何处理此表单的提交和控制?我接受以下选择:

  1. form1POST 上创建一个Person 对象,并为其余字段写入带有空字符串的do DB,然后在form2 POST 上更新DB
  2. 构建Person 对象客户端并使用AJAX 创建新页面的错觉
  3. 通过控制器使用sessions,并在用户浏览表单时传递此信息

似乎选项三是最好的解决方案,虽然我不太确定如何做到这一点。如果选项 3 是最佳实践,我该如何使用 play framework

【问题讨论】:

    标签: java forms session web-applications playframework


    【解决方案1】:

    首先将两个字段firstnamelastname 存储在您从控制器中的客户端收到的Person 对象中。

        Person person = new Person();
        person.firstname = fname;
        person.lastname = lname;    
        // Remaining two fields will be null in this point
    

    用现有的人物对象填充游戏Form

    Form&lt;Person&gt; personForm = Form.form(Person.class).fill(person);

    通过将 personForm 作为参数传递到 form2

    return redirect(views.html.person_form2.render(personForm));

    在您的Form2 中隐藏firstnamelastname 并从pesronForm 填充它们的值,其他两个字段将照常可见,其值留空。

        @(personForm: Form[Person])
    
        <!-- create hidden field for firstname and lastname like following -->
        <input type="hidden" name="firstname" value='@personForm.field("firstname").value' >
    

    提交后,您将获得控制器中的所有四个字段值。

    Form<Person> personForm = Form.form(Person.class) Person person = personForm.bindFromRequest().get();

    【讨论】:

    • 感谢您的回复。这是最常见的做法吗?还是 AJAX 实践更普遍?我想减少对服务器的访问会更有效,但是使用 AJAX 来实现这一点似乎有点 hacky。有什么想法吗?
    • 感谢您的接受,我认为这是实现这一目标的直接方式。我只是想知道为什么您在一个表单中有两个字段而在另一个表单中有两个字段?
    • 这是因为我正在使用Phonegap 构建一个移动应用程序,并且我正在尝试模仿构建的小表单的移动体验。我想另一个例子是填写在线申请。
    • 知道了。快乐编程。
    猜你喜欢
    • 2012-09-27
    • 2020-07-18
    • 1970-01-01
    • 2019-10-25
    • 1970-01-01
    • 1970-01-01
    • 2016-02-01
    • 1970-01-01
    • 2017-06-06
    相关资源
    最近更新 更多