【问题标题】:Playframework: play.data.Form<T>.fill(T value) doesn't populate the formPlayframework:play.data.Form<T>.fill(T value) 不填充表单
【发布时间】:2020-07-14 21:02:33
【问题描述】:

我正在使用 Playframework 2.8.x,我想在我的控制器中填充 play.data.Form 并将填充的副本传递到前端,我想在视图模板中使用它来预填充表单保存的值(用于编辑)。 但是,fill-Method - 据我了解 - 应该返回表单的副本,该表单已填充传递的对象字段作为值,不会被填充。有什么建议吗?

下面是一些示例代码:

public class Application extends Controller {

private Form<User> userForm;
final static Logger logger = LoggerFactory.getLogger("controllers.Application");


@Inject 
public HomeController(FormFactory formFactory, MessagesApi messagesApi) {
    this.userForm = formFactory.form(User.class);
    this.messagesApi = messagesApi;
}

public Result editProfile(Request request) {
    
    User activeUser = User.find.query().where().eq("email", "example@test.de").findOne();
    logger.info("User - Firstname: " + activeUser.getFirstName());
    userForm = userForm.fill(activeUser);

    logger.info("userForm - raw data: " + userForm.rawData());
    logger.info("userForm: " + userForm);
    
    return ok(editProfile.render(userForm, request, messagesApi.preferred(request)));
}
}

用户成功从数据库中取回(第一个日志将正确的名字写入控制台,而第二个和第三个日志显示表单确实是空的:

userForm - raw data: {}
userForm: Form(of=class models.User, data={}, value=Optional[User [email= example@test.de]], errors=[])

为什么没有填充表单?

【问题讨论】:

    标签: playframework


    【解决方案1】:

    已解决:表单实际上一直在填充。它只是不携带任何“原始”数据。表单的值属于 Optional 类,可以像这样在前端检索:

    @userForm.value().get().getEmail()
    

    userForm.value() 为您提供 Optional,get() 为您提供实际用户,而 getEmail() 是我在 Model User 上的字段电子邮件的 getter 方法。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2014-06-18
      • 2018-08-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多