使用Play!2将信息从一个页面传输到另一个页面

时间:2012-07-23 16:04:27

标签: playframework playframework-2.0

我正在尝试为网站创建注册页面。注册过程有两个阶段:

  1. 用户在页面上的表单上输入他们的姓名,电子邮件,密码。他们点击下一步,然后点击

  2. 用户在新页面上输入其他信息(可能上传照片,无论如何)并点击提交。

  3. 然后使用所有这些信息(来自第1页和第2页)创建新用户。如何将信息从一个页面存储到另一个页面?

    可行的一种方法可能是在第二页上的表单中创建额外的字段,并用第一页的信息填充它们,但它看起来有点hacky。是否有推荐的方式去做?

2 个答案:

答案 0 :(得分:3)

你不需要为每次与用户的交互使用Form.class,这是很好的帮手,但是......只是帮助。

将您的注册流程划分为少量操作,每个操作都只负责编辑模型的一部分

  1. 您的第一个默认视图应该是最大的,并且应该使用Form.classConstraints注释来验证数据。当然,您需要设置new/createedit/update等其他操作。发送该表单后,该帐户将保存在DataBase中,因此您只需在其他操作中对其进行更改即可识别它唯一ID。
  2. 您的下一个视图(假设只有change password表单)可以使用其他Form.class ,如果它非常简单并且有特殊的验证规则(比如密码奇怪)等)你可以使用ie。 editPassword/updatePassword一组操作并手动更新您的用户对象:

    public static Result updatePassword(Integer user_id){
        User user = User.find.byId(user_id);
        DynamicForm formData = form().bindFromRequest();
    
        if (!customValidatorMethod(formData.password)){
             return badRequest("Password was not changed");
        }
    
        user.password = formData.password;
        user.update(user_id);
        return ok("Password changed);
    }
    
  3. 接下来,您可以根据需要创建任意数量的步骤。

    注意:不要在会话数据中保存用户名和密码,因为某些 smartie 可以将其用于他的老板....而是使用在第一步中创建的用户的id另外,您可以添加简单字段,如registrationStepregistrationId(随机散列),以便在所有必需的注册步骤之间识别新用户。您将在完整注册过程后删除该会话数据,同时您可以通过简单检查步骤编号来检查用户是否完成注册。

答案 1 :(得分:1)

我这样做的方法是创建User对象并在提交第一个表单后立即将其存储在数据库中,因为这样可以让用户稍后再回来,如果它太麻烦了。

如果你不介意失去无国籍状态,你也可以使用session()暂时存储它。

session("username", USERS_CHOSEN_NAME);
session("password", USERS_CHOSEN_PASSWORD);